黑馬程序員--Java基礎學習筆記【Object類、String類】

 

 ------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------    

 

  • Object

在Java類繼承結構中,java.lang.Object類位於頂端。

所有類都直接或間接繼承Object類。

(接口不能繼承Object類,接口中隱含定義了Object類的所有公共方法,但是全抽象)

Object類型的引用變量可以指向任何類型對象。

Object類成員方法

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());// 類名@散列碼

}

重寫toString方法

public String toString() {

return getClass().getName() + " [name= "+ name + " , salary= " + salary + "]"; // 類名[域值]

}

publicfinalnative Class<?> getClass();

 

publicbooleanequals(Object obj){

   return(this== obj);

}

  • ==”和equals 區別

前者是比較運算符,後者是方法

 

前者比較基本類型,符號兩端數據是否相等

比較引用類型,符號兩端引用類型的地址是否相等,即是否指向相同的對象

equals 方法

不重寫的情況下,默認同“==”,比較的是對象的地址

可以重寫方法建立對象自己的比較方法,比較成員變量的值

protectedvoid finalize() throws Throwable { }

當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。

  • final,finally, finalize 的區別

final是一個修飾符,修飾類不能被繼承,修飾變量必須在聲明時給定初值,且不可修改,修飾方法不能被重載。

finally用在異常處理時提供finally塊來執行任何清除操作,如果拋出異常,先執行相匹配的catch子句,再進入finally塊執行。

finalize是方法名,Java允許使用該方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。

  • ScannerSinceJDK5獲取用於鍵盤輸入

構造方法 public Scanner(InputStream source)

成員方法hasNextXXX(), nextXXX()

 

  • String

  • String是不可變對象

    java.lang.String使用了final修飾不能被繼承

    字符串底層封裝了字符數組及針對字符數組的操作算法

    字符串一旦創建,對象永遠無法改變,但字符串引用可以重新賦值

  • String類的構造方法

    public String()

    public String(byte[] bytes)

public String(byte[] bytes, int offset, intlength)

public String(char[] value)

public String(char[] value, int offset, intcount)

public String(String original)

字符串是常量,創建之後不能更改,證明String對象的不變性

    String string = "www.itcast.cn";

    System.out.println(string);// www.itcast.cn

    method(string);

    System.out.println(string); // www.itcast.cn

    voidmethod(Strings) {

       s = s + "0807Java";

    }

  • Sting 常量池

    Java爲了提高性能,靜態字符串(字面量/常量/常量連接的結果)在常量池中創建,並儘量使用同一個對象,重用靜態字符串;對於重複出現的字符串直接量,JVM會首先在常量池中查找,如果存在即返回該對象。

String str1= "itcast";

      

       // 不會創建新的String對象,而是使用常量池中已有的"itcast"

       Stringstr2= "itcast";

      

       System.out.println(str1 == str2); // true

      

       // 使用new 關鍵字會創建新的String對象

       // 創建了2個對象,new String() "itcast"

       Stringstr3= newString("itcast");

      

       System.out.println(str1 == str3); // false

       // String類重寫了equals方法

       System.out.println(str1.equals(str3)); // true

 

String類的判斷方法

    boolean equals(Object obj)

    boolean equalsIgnoreCase(String str)

    boolean contains(String str)

    boolean startsWith(String str) // 檢測字符串是否以指定字符串開頭

    boolean endsWith(String str)

    boolean isEmpty()

String類的獲取功能

    int length()

    char charAt(int index) // 獲取指定索引上的字符

    int indexOf(int ch) // 獲取指定字符第一次出現位置的索引,沒有返回-1

    int indexOf(String str)

    int indexOf(int ch, int fromIndex)

    int indexOf(String str, int fromIndex)

    int lastIndexOf(String str, int from) // 返回最後一個出現的位置

    String substring(int beginIndex)

    String substring(int beginIndex, int endIndex)

String 類的轉換功能

    byte[] getBytes()

    char[] toCharArray()

    static String valueOf(char[] chs) // 字符數組à字符串

    static String valueOf(Object obj) // 其他類型à字符串

    String toLowerCase() // 將字符串中的大寫字母轉成小寫

    String toUpperCase()

    String concat(String str) // 將指定字符串str連接到調用字符串的結尾,返回一個新的字符串對象

其他功能

    String replace(char old, char new)

    String replace(String old, String new)

    String trim() // 去掉字符串首尾兩端的空格

    int compareTo(String str) // 按字典順序比較

    int compareToIgnoreCase(String str)

    String[] split(String regex) // 按照正則表達式的匹配拆分字符串

 

// 自定義方法實現兩個字符串的比較,完全相等返回 true

    publicstaticboolean isEqual(String str1, String str2) {

       // 將兩個字符串分別轉換成字符數組

       char[] array1 = str1.toCharArray();

       char[] array2 = str2.toCharArray();

       // 比較兩個字符數組的長度,如果相等,繼續比較數組元素

       if (array1.length == array2.length) {

           // 遍歷字符數組

           for (inti = 0; i < array1.length; i++) {

              // 比較當前索引元素是否相等,不相等返回 false,停止繼續比較

              if (array1[i] != array2[i]) {

                  returnfalse;

              }

           }

           // 字符數組遍歷完畢,每個元素值都相等,返回 true

           returntrue;

       }

       // 當字符數組長度不同時,直接返回 false

       returnfalse;

    }

 

// 自定義方法實現兩個字符串的比較,完全相等返回 true

    publicstaticboolean isEqual2(String str1, String str2) {

       if (str1.length() == str2.length()) {

           for (inti = 0; i < str1.length(); i++) {

              if (str1.charAt(i) != str2.charAt(i)) {

                  returnfalse;

              }

           }

           returntrue;

       }

       returnfalse;

    }

 

// 將字符串中的英文字符進行大小寫互轉

    publicstatic StringtoAnotherCase(String string) {

       // 將字符串轉換成字符數組

       char[] array = string.toCharArray();

       // 遍歷字符數組,根據判斷ASCII值判斷其大小寫狀態並進行轉換

       for (inti = 0; i < array.length; i++) {

           // 大寫字母 --> 小寫字母

           if (array[i] >= 65 && array[i] <= 90) {

              array[i] += 32;

           }elseif(array[i] >= 97 && array[i] <= 122) { // 小寫字母 --> 大寫字母

              array[i] -= 32;

           }// 其他字符不處理

       }

       // 將字符數組轉換成字符串

//     StringanotherCase = String.valueOf(array);

      

       StringanotherCase= newString(array);

       // 返回轉換後的字符串

       returnanotherCase;

    }

 

// 判斷一個字符串是不是迴文

    publicstaticboolean isPalindrome(String string) {

       // 限制判斷字符的長度不小於 3 個字符,且必須是奇數

       if (string.length() >= 3&& string.length()% 2 == 1) {

           // 將字符串轉換成字符數組

           char[] array = string.toCharArray();

           // 從字符數組索引的頭尾兩端取元素判斷是否相等,不相等直接返回 false

           for (intmin = 0, max = array.length - 1; min < max; min++, max--) {

              if (array[min] != array[max]) {

                  returnfalse;

              }

           }

           // 判斷完畢沒有不相等的元素則返回 true

           returntrue;

       }

       // 字符長度小於3,直接返回 false

       returnfalse;

    }

 

// 統計字符串中大小寫字母數字其他字符出現的次數

    publicstaticvoid count(String string) {

       // 計數器

       intupper = 0, lower = 0, digit = 0, other = 0;

       // 遍歷數組

       for (inti = 0; i < string.length(); i++) {

           // 取出數組中每個位置上的字符元素

           charch = string.charAt(i);

           if (ch >= 'a' && ch <= 'z') { // 判斷小寫

              lower++;

           }elseif(ch >= 'A' && ch <= 'Z') { // 判斷大寫

              upper++;

           }elseif(ch >= '0' && ch <= '9') { // 判斷數字

              digit++;

           }else{ // 其他字符

              other++;

           }

       }

//     other= string.length() - lower - upper;

       System.out.println("lower= "+ lower);

       System.out.println("upper= "+ upper);

       System.out.println("digit= "+ digit);

       System.out.println("other= "+ other);

    }

 

// 統計一個字符串在另一個字符串中出現的次數

    publicstaticvoid countTimes(String string, String sub) {

       // 計數器,index保存當前查找結果的索引

       intcount = 0, index = 0;

       // 循環查找,結束條件是在目標串中查找不到子串

       while ((index = string.indexOf(sub)) != -1) {

           count++;

           // 截取字符串,保留此次索引+字串長度以後的部分

           string = string.substring(index + sub.length());

       }

       System.out.println("共出現" + count + "");

    }

 

// 將字符串反轉,結果返回反轉之後的字符串

    publicstatic String reverse(String string) {

       // 字符串 --> 字符數組

       char[] cs = string.toCharArray();

       // 交換首尾兩端的數組元素,實現位置反轉

       for (intmin = 0, max = cs.length - 1; min < max; min++, max--) {

           chartemp = cs[min];

           cs[min] = cs[max];

           cs[max] = temp;

       }

       // 字符數組 --> 字符串

       string = new String(cs);

 

       returnstring;

    }

 

  • StringBufferStringBuilder

封裝可變的字符串,對象創建後可以通過調用方法改變其封裝的字符序列。

StringBuffer線程安全的可變字符序列,StringBuilder線程不安全的可變字符序列

構造方法

    StringBuffer() // 空的字符串緩衝區,默認初始容量16個字符

    StringBuffer(int capacity) // 指定容量

    StringBuffer(String str) // 字符串 -->字符串緩衝區

成員方法

    public StringBuffer append(String str) // 追加字符串

    public StringBuffer insert(int offset,String str) // 插入字符串

    public StringBuffer deleteCharAt(int index)// 刪除字符

    public StringBuffer delete(int start, intend) // 刪除字符串

    public StringBuffer replace(int start, intend, String str) // 替換字符串

    public StringBuffer reverse() // 字符串反轉

    public String substring(int start) // 獲取子串

    public String substring(int start, int end)

 

 

       StringBufferbuffer= newStringBuffer("www.itcast.cn");

       System.out.println(buffer); // www.itcast.cn

       System.out.println("證明緩衝區可變");

       method(buffer);

       System.out.println(buffer); // www.itcast.cn0807Java

   

        // 定義方法向緩衝區中追加字符串

void method(StringBuffer buffer) {

           buffer.append("0807Java");

        }

 

// 定義方法實現緩衝區反轉

    publicstaticvoidreverseBuffer(StringBuffer buffer) {

       // 緩衝區變成字符串,變成字符數組

       char[] ch = buffer.toString().toCharArray();

       // 數組反轉

       for (inti = 0, j = ch.length - 1; i < j; i++, j--) {

           chartemp = ch[i];

           ch[i] = ch[j];

           ch[j] = temp;

       }

       // 數組變成緩衝區,清空原有緩衝區

       buffer.delete(0,buffer.length());

        buffer.append(ch);

    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章