1. 程式人生 > 實用技巧 >Java SE(二)

Java SE(二)

1. Java Vector類

向量是 java.util 包提供的一個非常重要的工具類。它對應於類似陣列的順序儲存的資料結構。
它允許不同型別的元素共存於一個變長陣列中,因此可以看作是對不同型別元素按照動態陣列進行處理。
每個 Vector 類的物件可以表達一個完整的資料序列。
具體使用方法見:菜鳥教程 Java Vector類

2. 字串型別

Java 中提供了 String 和 StringBuffer 型別,它們都是類,因此 Java 中的字串是一個真正的物件。

2.1 String 與 StringBuffer 的區別

Java 提供的標準包 java.lang 中封裝了 String 和 StringBuffer,分別用於處理 不變字串

可變字串
不變字串:字串一旦建立,其內容就不能改變。

2.2 String 類

(1)常見 String 類的獲取功能:

  • public int length(): 獲取字串的長度。
  • public char charAt(int index): 獲取指定索引位置的字元
  • public int indexOf(int ch): 返回指定字元在此字串中第一次出現處的索引。
  • public int indexOf(String str): 返回指定字串在此字串中第一次出現處的索引。
  • public int indexOf(int ch,int fromIndex):返回指定字元在此字串中從指定位置後第一次出現處的索引。
  • public int indexOf(String str,int fromIndex): 返回指定字串在此字串中從指定位置後第一次出現處的索引。
  • public String substring(int start): 從指定位置開始擷取字串,預設到末尾。
  • public String substring(int start,int end): 從指定位置開始到指定位置結束擷取字串。

(2)常見 String 類的判斷功能

  • public boolean equals(Object obj): 比較字串的內容是否相同,區分大小寫
  • public boolean equalsIgnoreCase(String str): 比較字串的內容是否相同,忽略大小寫
  • public boolean contains(String str): 判斷字串中是否包含傳遞進來的字串
  • public boolean startsWith(String str): 判斷字串是否以傳遞進來的字串開頭
  • public boolean endsWith(String str): 判斷字串是否以傳遞進來的字串結尾
  • public boolean isEmpty(): 判斷字串的內容是否為空串""。

(3)常見 String 類的轉換功能

  • public byte[] getBytes(): 把字串轉換為位元組陣列。
  • public char[] toCharArray(): 把字串轉換為字元陣列。
  • public static String valueOf(char[] chs): 把字元陣列轉成字串。
  • public static String valueOf(int i): 把int型別的資料轉成字串。(String類的valueOf方法可以把任意型別的資料轉成字串。)
  • public String toLowerCase(): 把字串轉成小寫。
  • public String toUpperCase(): 把字串轉成大寫。
  • public String concat(String str): 把字串拼接。

(4)常見String類的其他常用功能

  • public String replace(char old,char new) 將指定字元進行互換
  • public String replace(String old,String new) 將指定字串進行互換
  • public String trim() 去除兩端空格
  • public int compareTo(String str) 會對照ASCII 碼錶 從第一個字母進行減法運算 返回的就是這個減法的結果,如果前面幾個字母一樣會根據兩個字串的長度進行減法運算返回的就是這個減法的結果,如果連個字串一摸一樣 返回的就是0
  • public int compareToIgnoreCase(String str) 跟上面一樣 只是忽略大小寫的比較.

2.3 StringBuffer 類

StringBuffer 類處理可變字串,當修改一個StringBuffer類的字串時,不用再建立一個新的字串物件,而是直接操作原字串。
系統在為 String 類物件分配記憶體時,按照物件中所含字元的實際個數等量分配。而為 StringBuffer 類物件分配記憶體時,除去字元所佔空間外,再另加 16 個字元大小的緩衝區。對於 StringBuffer 類物件,使用 length() 方法可獲得字串長度,另外,還有 capacity() 方法返回緩衝區的容量。一般的,StringBuffer 的長度是指儲存在其中的字元個數,容量是指緩衝所能容納的最大字元數

3. 預設的構造方法

每個類都必須至少有一個構造方法。如果程式設計師沒有為類定義構造方法,則系統會自動為該類生成一個預設的構造方法。預設構造方法的引數列表及方法體均為空,所生成的物件屬性值也為零或空。

4. finalize() 方法

finalize() 方法屬於 Object類,它可被所有類使用。當物件例項不被任何變數引用時,Java 會自動進行“垃圾回收”,收回該例項所佔用的記憶體空間。
一個物件有它的生存期,在 Java 程式中,程式設計師需要使用 new 來正式說明物件的開始,但物件的結束不需要程式設計師明確說明,這由系統自動判定。這就是所謂的“自動垃圾回收”。
系統時刻監視每個物件的使用情況,掌握每個物件例項的引用數。一旦為零,則自動消亡這個物件。在對物件例項進行垃圾收集之前,Java 自動呼叫物件的 finalize() 方法,它相當於 C++ 中的解構函式,用來釋放物件所佔用的系統資源。
finalize()方法的說明方式如下:

protected void finalize () throws Throwable

5. Object 類提供的方法

Object 類是 Java 程式中所有類的直接或間接父類,也是類庫中所有類的父類,處在類層次最高點。
所有其他的類都是從 Object 類派生出來的,所以 Object 類包含了所有 Java 類的公共屬性,其構造方法是 Object(),其中主要有如下方法:

  • public final Class getClass(); 獲取當前物件所屬的類資訊,返回 Class 物件。
  • public String toString(); 按字串物件返回當前物件本身的有關資訊。
  • public boolean equals(Object obj); 比較兩個物件是否是同一個物件,則返回 true。
  • protected Object clone(); 生成當前物件的一個副本,並返回這個複製物件。
  • public int hashCode(); 返回該物件的雜湊碼值。
  • protected void finalize() throws Throwable; 定義回收當前物件時所需完成的資源釋放工作。

6. Java 包

一個 Java 原始碼檔案稱為一個編譯單元。一個編譯單元中只能有一個 public 類,且該類名與檔名相同。編譯單元中的其他類是該主 public 類的支撐類。經過編譯,編譯單元中的每個類都產生一個 .class 檔案。Java 的工作程式是一系列的 .class 檔案,Java 直譯器負責尋找、載入和解釋這些檔案。
在 Java 中必須要有一種對名字空間的完全控制機制,以便可以建立一個唯一的類名。這就是 包機制,用於類名空間的管理。

7. 類方法

如果需要用到一個尚未建立物件例項就去引用它的程式程式碼,那麼標記上關鍵字 static 即可實現。

class GeneralFunction {
   public static int addUp(int x, int y){
       return x+y;
   }
}
public class UseGeneral {
   public static void main(String args[]){
       int a = 9;
       int b = 10;
       int c = GeneralFunction.addUp(a,b);
       System.out.println(c); // 輸出:19
   }
}

呼叫方法時,字首使用的是類名,而不是物件例項名。
若從當前類中的其他方法中呼叫,則不需要寫類名,可以直接寫方法名

7.1 使用靜態方法時,有兩個特別的限制:

  • 由於靜態方法可以在沒有定義它所從屬的類的物件的情況下加以呼叫,故不存在 this 值。因此,一個靜態方法只能使用 其內部定義的引數 或 靜態變數。
  • 靜態方法不能被重寫。也就是說在這個類的子孫類中,不能有相同的名稱、相同引數的方法。

8. 抽象類 與 介面

8.1 抽象類

抽象類中的方法有抽象方法,這種方法只有方法的宣告,而沒有方法的實現。這些方法將在抽象類的子類中被實現。
抽象類中也有非抽象方法,反之,不能在非抽象類中宣告抽象方法。
抽象類也可以包含常規類能夠包含的任何東西。
如果一個抽象類除了抽象方法以外什麼都沒有,則使用介面更合適。

  • 抽象類的定義如下:
public abstract class Shape {
   //定義體
} //為使此類有用,它必須有子類。
  • 抽象方法定義如下:
public abstract <returnType> <methodName>(引數列表);

8.2 介面

介面是抽象類功能的另一種實現方法,可將其想象為一個“純”的抽象類。它允許建立者規定一個類的基本形式,包括方法名、自變數列表以及返回型別,但不規定方法主體。
介面中的所有方法均為 抽象方法,都沒有方法體。
Java 中定義了介面的概念,Java 通過允許一個類實現(implements)多個介面從而實現了比多重繼承更加強大的能力,並具有清晰的結構。