1. 程式人生 > >Java基礎類庫(上)

Java基礎類庫(上)

Java基礎類庫(上)

Java提供了豐富的基礎類庫,Java 8提供了4000多個基礎類,這些類可以幫我們降低開發難度,提高開發效率。但是這些基礎類並不需要我們去背,我們只需要在平常的使用中去反覆的查閱API文件,就可以記住大部分功能,下面介紹幾個在Java中常用的基礎類,來了解並學習基礎類的使用方法。

Object類

Object類、列舉類、陣列的父類,也就是說,Java允許把任何型別的物件賦給Object型別的變數。所有的類預設繼承Object父類。下面簡單介紹其中的幾個方法:

boolen equals(Object o)

這個方法用來判斷物件是否與該物件相等,相等的標準是地址值,而不是內容相等,所以沒有太多實用價值,因此我們都一般重寫此方法。
使用方法如下:

	Object obj = new Object();
	Object obj2 = new Object();
	boolean b = obj.equals(obj2);
    System.out.println(b);

我們再舉一個例子Student類如果我我們採用equals來進行比較兩個例項它會一直返回false,因為他比較的是其中的地址值比較,但是很顯然這不是我們想要的結果,所以我們可以通過重寫來達到我們想要的目的

   public boolean equals(Object obj) {
        if(obj==null){//判斷物件是否為空
            return
false; } if(this==obj){ return true; } if(!(obj instanceof Student)){ return false; } //向下轉型 Student stu= (Student) obj; return this.age==stu.age&&this.name.equals(stu.name); }

這樣重寫過後我們就可與通過調equals方法來實現物件的內容比較。

int hashCode()

返回物件的hashCode值,也就是物件的十六進位制地址值轉換成整型輸出,底層通過雜湊演算法實現。

		int cod1 = obj.hashCode();
        int cod2 = obj2.hashCode();
        System.out.println(cod1);
        System.out.println(cod2);

String toString()f

返回物件的字串表示,其實我們在使用System.out.print()方法輸出一個物件時,或者將一個物件和字串拼接時,系統就會預設呼叫toString方法返回該物件的字串表示,Object類的toString()方法返回“類名@十六進位制hashCode值”格式的字串。使用方法如下:

Object obj = new Object();
String s = obj.toString();
System.out.println(s);

但是,你不覺的這個東西對你而言意義也不是很大嗎?所以我們同樣的也是會重寫toString()方法來實現對於這個類的描述。

public String toString() {
 return "Student{" +
         "name='" + name + '\'' +
         ", age=" + age +
         '}';
}

Class<?> getClass()

方法可以獲取一個物件的型別類,然後在呼叫該類的方法可以獲取該類的相關資訊,比如父類的名字,該類的名字。

  Object obj = new Object();
  System.out.println(obj2.getClass());

Scanner類

Scanner類是一個基於正則表示式的文字掃描器,它可以從檔案輸入流、字串中解析出基本型別值和字串值。Scanner(InputStream source)構造一個新的 Scanner,它生成的值是從指定的輸入流掃描的。其中InputStream 代表輸入流
in是其中System類的一個常量public static final InputStream in“標準”輸入流。此流已開啟並準備提供輸入資料.

nextXxxx方法

這類方法一般是獲取一個輸入項,Xxx表示你所輸入的型別。使用方法如下:

InputStream in = System.in;
Scanner scanner = new Scanner(in);
int a = scanner.nextInt();
double b = scanner.nextDouble();
String str = scanner.nextLine();

但是這裡面還是字串讀取用nextLine有時還是有一些小BUG.

Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個整數");
int num = sc.nextInt();
System.out.println("請輸入一段字串");
//當你錄入整數,敲了一個回車換行,那麼sc.nextLine()就會把回車換行當作字串錄入了
// String s = sc.nextLine();//錄入字串
String s = sc.next();//錄入字串,但是沒有上面這種情況
System.out.println(s);
System.out.println(num)

在預設情況下Scanner用空白作為輸入分隔符。但是使用者可以通過UseDelimiter自定義分隔符。

 Scanner input = new Scanner(System.in);
 sc.UseDelimiter(String pattern);//該方法的引數是一個正則表示式。

hasXxxx方法

這個方法的意思是是否含有下一個輸入項返回值為bool型別,Xxxx可以是基本型別,但是如果是要判斷包含下一個字串,則直接使用hasNext();
使用方法如下:

 boolean b = scanner.hasNextInt();//判斷是否還有int型值輸入
        if(b){//如果有
            int num = scanner.nextInt();//將int值儲存在num中
        }

String類

String 類代表字串。Java 程式中的所有字串字面值(如 “abc” )都作為此類的例項實現。
字串是常量;它們的值在建立之後不能更改。字串緩衝區支援可變的字串。因為 String 物件是不可變的,所以可以共享。例如:

     String str = "abc"; 

等效於:

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);

下面給出了一些如何使用字串的更多示例:

     System.out.println("abc");
     String cde = "cde";
     System.out.println("abc" + cde);
     String c = "abc".substring(2,3);
     String d = cde.substring(1, 2);

下面我們簡單瞭解一下String的幾種常用方法

構造方法

1.String()

初始化一個新建立的 String 物件,使其表示一個空字元序列。

這是String的一個無參的構造器。

String s = new String();//建立了一個物件,不過字串的內容是個空串、
System.out.println(s.toString());

2.String( byte[] bytes)

通過使用平臺的預設字符集解碼指定的 byte 陣列,構造一個新的 String。

上面這句話是Java API文件中給出的解釋,總的來講他的做用就是將一個位元組陣列轉化成字串。比如:

byte[] bytes={98,99,100,101};
String s = new String(bytes)

3String( byte[] bytes, int index, int length)

把位元組陣列的一部分轉成字串(index:表示的是從第幾個索引開始, length表示的是長度)

byte[] bytes={98,99,100,101};
String s = new String(bytes, 1, 2);

同過上面的轉化我們就可以得到原陣列從索引1——索引2處的轉化後的字串。
4.String( char[] value)

分配一個新的 String,使其表示字元陣列引數中當前包含的字元序列。

同樣的這個構造器的意思就是將一個字元陣列轉化為字串。

char data[] = {'a', 'b', 'c'};
String str = new String(data);

5.String( char[] value, int index, int count)

分配一個新的 String,它包含取自字元陣列引數一個子陣列的字元。

char data[] = {'a', 'b', 'c'};
String str = new String(data,1,2);

int length()

這個方法可能就已經很熟悉了,它的作用就是返回一個字串的長度

String s = new String("abc");
System.out.println(s.length());//獲取字串的長度

String建立之後不可更改

我們剛剛提到過String建立後不可更改,但是,你有沒有試過下面的操作。

String s = "Hello";
s = "Hi";
System.out.println(s)

編譯並執行上面的程式,你會發現,它會輸出Hi,那麼這不就把s的值更改了嗎?可是Java又說字串是常量不可更改,這很矛盾嗎?我們來通過一張圖來看看,為什麼?
字串常量
也就是說你是將S的引用指向了常量池中的另一個物件但是並沒有從實際上改變Hello的內容。所以輸出才會是Hi。
6.String中equals和==的區別

==可以比較基本資料型別也可以用來比較引用資料型別,但是在比較引用資料型別時,是用其地址來作為比較條件的。
equals在Object類中也是同樣的以地址作為相等條件來進行比較,但是在大多數類中,我們都是通過重寫此方法來讓它達到我們想要的結果也就是比較其中的內容,同樣的String類中同樣的重寫了這個方法。

		String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);//false
        System.out.println(s1.equals(s2));//true
        String s3 = new String("hello");
        String s4 = "hello";
        System.out.println(s3 == s4);//false
        System.out.println(s3.equals(s4));//true
        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5 == s6);//true
        System.out.println(s5.equals(s6));//true

從上面的結果我們就可以看出,String類中重寫過後的equals方法可以實現我們想要的結果。

String類中的判斷方法

接著我們來看看在String中的一些判斷方法。
1.boolean equals (Object obj)
比較字串的內容是否相同, 區分大小寫

 boolean b = "abc".equals("Abc");//b為false

2.public boolean equalsIgnoreCase (String str)
比較字串中的內容不區分大小寫

 boolean b="abc".equalsIgnoreCase("ABC");//b為true

3.boolean contains (String str)
判斷字串中是否含有該子串

boolean b="abc".contains("ab")

4.**boolean startsWith (String str) **
判斷字串是否以傳遞進來的字串開頭

boolean b="abc".startsWith("b")

5.boolean endsWith (String str)
判斷字串是否以傳遞進來的字串結尾

boolean b="abc". endsWith("a")

6.boolean isEmpty ()
判斷字串的內容是否為空串 “”

boolean b="abc".isEmpty()

。。。。
這類方法還有許多這裡就不一一贅述了。

String中的獲取方法

1.char charAt ( int index)
獲取指定索引位置的字元

char ch = "String".charAt(1);

2.int indexOf ( int ch)
返回指定字元在此字串中第一次出現處的索引。

int index =  "String".indexOf('t');

3.int indexOf (String str)
返回指定字串在此字串中第一次出現處的索引。

int index =  "String".indexOf("St");

4.int indexOf ( int ch, int fromIndex)
返回指定字元在此字串中從指定位置後第一次出現處的索引。

int index =  "String".indexOf('i',2);

5.int indexOf (String str,int fromIndex)
返回指定字串在此字串中從指定位置後第一次出現處的索引。

int index =  "String".indexOf("ing",2);

6.lastIndexOf方法
用法和上面的方法相同只不過返回的時最後一次出現的索引

String類擷取方法

1.String substring ( int start)
從指定位置開始擷取字串, 預設到末尾。

String str = "acacascas".substring(6)

2.String substring ( int start, int end)
從指定位置開始到指定位置結束擷取字串。

String str = "acacascas".substring(3,6)

String類的遍歷

說到遍歷字串我們想到最常用的方法就是用迴圈來遍歷就像這樣

 String str="School;
        for(int i=0;i<str.length();i++){
            char ch= str.charAt(i);
            System.out.println(ch);
        }

String類的轉換

1.byte[] getBytes ()
把字串轉換為位元組陣列。
2.char[] toCharArray ()
把字串轉換為字元陣列。
3.String valueOf ( char[] chs)
把字元陣列轉成字串。
4.String valueOf ( int i)
把int型別的資料轉成字串。
5.String toLowerCase ()
把字串轉成小寫。
6.String toUpperCase ()
把字串轉成大寫。
使用方法和其他的String方法使用類似這裡就不再一一舉例了。

String的替換

1.String replace(char old,char new)
將指定字元替換為其他字元
2.String replace(str old,str new)
將指定字串替換為其他字串
3.** String trim()**
去除字串的兩端空格。

String的比較

1.int compareTo(String anotherString)
比較兩個字串,返回ASCAL碼差值
2.int compareToIgnoreCase(String str)
忽略大小寫比較兩個字串,返回ASCAL碼差值

StringBuffer類和StringBuilder類

StringBuffer執行緒安全的可變字元序列。一個類似於 String 的字串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字元序列,但通過某些方法呼叫可以改變該序列的長度和內容。同樣的StringBuffer類中也提供了很多方法,來方便我們使用。
StringBuilder一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。
1.StringBuffer append( type variable_name)
追加任意型別的變數到StringBuffer的末尾。其中的引數可以是任意型別的資料
2.**StringBuffer insert(int offset, type variable_name) **
在指定位置插入內容
3.StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。
4.StringBuffer delete(int start, int end)
移除此序列的子字串中的字元。
5.StringBuffer replace(int start, int end, String str)
使用給定 String 中的字元替換此序列的子字串中的字元。
6.StringBuffer reverse()
將此字元序列用其反轉形式取代。
除了以上方法外,String類中的大多方法同樣適用於StringBuffer和StringBulider。

String和StringBuffer的轉換

1.通過append方法實現

  //String-----StringBuffer
        String s="abc";
        StringBuffer sb = new StringBuffer(s);
        StringBuffer sb2 = new StringBuffer().append(s);

2.通過toString方法

//StringBuffer----String
        StringBuffer sb3 = new StringBuffer("eee");
        String s1 = sb3.toString();
        System.out.println(s1);

3.通過substring方法

        String s2 = sb3.substring(0);
        System.out.println(s2);

4.通過字串的構造方法把StringBuffer轉換成String型別

        String s3 = new String(sb3);
        System.out.println(s3);