Java基礎(六),java基礎

來源:互聯網
上載者:User

Java基礎(六),java基礎
一、封裝類

  JAVA是一種物件導向語言,java中的類把方法與資料連線在一起,但在JAVA中不能定義基本類型對象為了能將基本類型視為對象進行處理,java為每個基本類型都提供了封裝類

對應關係如下:

基本類型 封裝類型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

 

 

 

 

 

 

 1、Number類

  BigDecimal、BigInteger、Byte、Double、Float、Integer、Long、Short 都是Number類的子類。

  Character和Boolean 父類是Object,不屬於Number下面的子類。

查看API文檔:

  Number類是抽象類別,不能直接通過new關鍵字建立。 Number類有六個方法,並且這些方法有些是abstract修飾的方法(抽象方法),Number 的子類需要覆寫這些抽象方法。

2、Integer封裝類

查看API文檔:

  理解:Integer類裡麵包含一個int value,可以理解內部有個變數盒子,存放int值,也就是說Integer類裡面有個int值。

  由於父類Number已經提供6個方法,子類就可以調用父類提供6個方法,把Integer對象裡面的int 值轉換成其他的6個基本類型值,比如轉換成byte,short,int,long,float,double 。

  同理:對於Number子類的其他類型,比如Double類也是一樣,可以調用Number類裡面提供的6個方法把Double裡面存放的值轉換成這6個值。

  查看 Integer 原始碼,可以看到 Integer 類裡面有 int 欄位,有個構造方法。

  當通過Integer構造方法建立Integer對象的時候 (比如new Integer(123)),就把值,存放到 int 類型的欄位裡面。

2.1 Integer 構造方法

 查看API文檔:

查看 Integer 原始碼:

  可以看出通過 Integer(String s) 構造方法的源碼看出,最終還是把值賦值給變數 this.value,this.value  是指在Integer裡面定義的一個int 變數,用於存放值。

注意:

1、當試圖將字串轉換成一種數實值型別時,該字串裡麵包含不能轉換的字元時,出現異常。例如含有字母(A、B、C)或運算子(+ 、-)等。

2、不能超出 int 的範圍時,比如12345678987654321 。 

3、自動裝箱拆箱

自動裝箱:從基本類型(int)轉換成封裝類型(Integer),不用手動進行轉換操作,編譯器會自動調用 Integer.valueof 方法把基本類型(int)轉換成 (Integer)類型這種方式。

方式一:通過構造方法new Integer(123);

方式二:直接賦值給Integer ;

    Integer integer = 123;

自動拆箱:從封裝類型(Integer)轉換成基本類型(Int),也不用在進行手動進行轉換操作,編譯器會自動調用 Integer.intValue 把封裝類型(Integer)轉換成基本類型 (int)。

方式一:調用Integer裡的方法 intValue方法;

方式一:直接賦值給int;

8 種基本類型與封裝類型之間的轉換都支援自動拆箱和裝箱操作。

4、short類、Long類和Double類

  除了這個Integer封裝類以外,還有Short,Long,Double封裝類,結構都和Integer類似。

5、Boolean類 和 Character類

  Character和Boolean 父類是Object。   

  Boolean類無最大,最小值。

  Character就表示一個字元,而String 字串表示多個字元。

6、String類

查看API文檔:

從API看出String類特點:

  1.索引是從0開始的;

  2.字串對象(String對象)一旦建立其長度和內容就不能更改;

建立String對象的方式:

  1、直接賦值,String name = "abcdefg";

  2、調用String的構造方法。

 1 public class Demo { 2     /** 3     * 測試建立字串 4     */ 5     @Test 6     public void test1(){ 7         String s1 = new String();  //表示一個Null 字元串 8         String s2 = ""; 9         String s3 = null;10 11         System.out.println(s1 == s2 );  //false12         System.out.println(s1.equals(s3));  //false13         //System.out.println(s3.equals(s1));  s3 放在equals前面會報null 指標異常 java.lang.NullPointerException14     }15 }

分析:

   String s1 = new String();  //s1將指向具體的String執行個體,預設值為“”,在記憶體中分配一個空間;

   String s2 = " ";  //s2對應一個空串,聲明對象的引用 ,在記憶體中分配一個空間;

   String s3 = null;  //s3引用為空白;

注意:s1和s2被執行個體化,而s3沒有執行個體化,但s1和s2所指的地址空間不同,值一樣,都為空白。

 6.1 String 類常用方法

1、char charAt(int index);

  取字串中指定位置的字元,index 從0 開始計算。

 1 public class Demo { 2     /** 3      * 測試charAt 4      */ 5     @Test 6     public void testCharAt() { 7         String str = "abcdefg"; 8         for (int i = 0; i < str.length(); i++) { 9             char element = str.charAt(i);10             System.out.print("[" + element + "]");  //輸出:[a][b][c][d][e][f][g]11         }12     }13 }

2、int codePointAt(int index);

  返回指定索引處的字元(Unicode 代碼點)。

 1 public class Demo { 2     /** 3     * 測試codePointAt 4     */ 5     @Test 6     public void testCodePointAt(){ 7         String str = "abcdefg"; 8         int codePointAt = str.codePointAt(2); 9         System.out.println(codePointAt);  //輸出:99 代表c 的 ASCII碼10     }11 }

3、String concat(String str);

  將指定(傳入)字串串連到此(當前)字串的結尾。用於連接字串

 1 public class Demo { 2     /** 3     * 測試concat 4     */ 5     @Test 6     public void testConcat(){ 7         String str1 = "字串1111"; 8         String str2 = "字串2222"; 9         String concatStr = str1.concat(str2);  //建立一個字串10         System.out.println(concatStr);  //輸出:字串1111字串222211     }12 }

4、boolean endsWith(String suffix);

  測試此字串是否以指定的尾碼結束。

 1 public class Demo { 2     /** 3      * 測試endsWith 4      */ 5     @Test 6     public void testEndsWith(){ 7         String str = "abcd"; 8         boolean result = str.endsWith("d"); 9         System.out.println(result);  //返回:true10     }11 }

5、boolean isEmpty();

  若且唯若length() 為 0 時返回 true。

 1 public class Demo { 2     /** 3      * 測試isEmpty 4      */ 5     @Test 6     public void testIsEmpty(){ 7         String str = "";  //不能為null 8         boolean result = str.isEmpty(); 9         System.out.println(result);  //返回:true10     }11 }

6、int length();

  返回當前字串長度。

7、String replace(char oldChar, char newChar);

  返回一個新的字串,它是通過用 newChar 替換此字串中出現的所有 oldChar 得到的。

 1 public class Demo { 2     /** 3      * 測試replace 4      */ 5     @Test 6     public void testReplace(){ 7         String str = "字串222"; 8         String newStr = str.replace("222", "替換"); 9         System.out.println(newStr);  //輸出:字串替換10     }11 }

8、String substring(int beginIndex);

  返回一個新的字串,從beginIndex 開始截取,它是此字串的一個子字串。

String substring(int beginIndex. int endIndex);

  返回一個新字串,它是此字串的一個子字串;注意:左閉右開,左邊包括,右邊不包括。

 1 public class Demo { 2     /** 3      * 測試substring 4      */ 5     @Test 6     public void testSubString(){ 7         String str1 = "abcdefg"; 8         String substring = str1.substring(1); 9         System.out.println(substring);  //輸出:bcdefg10 11         String str2 = "abcdefg";12         String substring1 = str2.substring(1, 3);13         System.out.println(substring1);  //輸出:bc 注意:不包含index為3的字元14     }15 }

9、String toLowerCase();

  將此String 中的所有字元都轉換為小寫。

10、String toUpperCase();

  將此String 中的所有字元都轉成大寫。

11、String trim();

  忽略字串前置空白和尾部空白。

 1 public class Demo { 2     /** 3      * 測試trim 4      */ 5     @Test 6     public void testTrim(){ 7         String str = "   233333   "; 8         String trim = str.trim(); 9         System.out.println(trim);  //輸出:233333 沒有空格了10     }11 }
6.2 StringBuffer 類和 StringBuilder 類

查看API文檔:

StringBuffer類常用方法

1、StringBuffer append(Object o);

  將指定的任意類型對象追加到此StringBuffer 對象。

2、StringBuffer delete(int start, int end);

  移除此序列的子字串中的字元。

3、StringBuffer insert(int offset, Object o);

  將任意型別參數的字串表示形式插入此序列中。

4、StringBuffer replace(int start, int end, String str);

  使用給定 String 中的字元替換此序列的子字串中的字元。

 1 public class StringBufferTest { 2     /** 3     * 測試StringBuffer方法 4     */ 5     @Test 6     public void testStringBufferMethod(){ 7         //1.StringBuffer append(Object o); 添加 8         StringBuffer str = new StringBuffer("abcdefgh"); 9         str.append("ijk");10         System.out.println(str);  //輸出:abcdefghijk11 12         //2.StringBuffer delete(int start, int end); 刪除13         str.delete(0, 3);  14         System.out.println(str);  //輸出:defghijk  左閉右開[ )15 16         //3、StringBuffer insert(int offset, Object o); 插入17         str.insert(1, "333");18         System.out.println(str); //輸出:d333efghijk19 20         //4、StringBuffer replace(int start, int end, String str); 替換21         str.replace(1, 4, "222");22         System.out.println(str);  //輸出:d222efghijk23     }24 }
比較 StringBuffer 和 String
 1 public class StringBufferTest { 2     /** 3      * 測試StringBuffer 4      * 把0-9999 整數串連成一個字串; 5      * 類似效果123456789101112....9999; 6      *  7      * 分析:1. 動態擷取10000個值,使用for迴圈 8      * 2. 定義一個Null 字元串str 9      * 3. 迴圈拼接10      */11     @Test12     public void testStringBuffer() {13         long begin1 = System.currentTimeMillis();14         String str1 = "";15         for (int i = 0; i < 10000; i++) {16             str1 += i;17         }18         System.out.println(str1);19         long end1 = System.currentTimeMillis();20         System.out.println(end1 - begin1);  //輸出: 974  花費時間多,因為要建立 10000 個對象。21 22         System.out.println("=========");23 24         //使用stringBuffer 只建立一個對象25         long begin2 = System.currentTimeMillis();26         StringBuffer str2 = new StringBuffer();27         for (int i = 0; i < 10000; i++) {28             str2.append(i);29         }30         System.out.println(str2);31         long end2 = System.currentTimeMillis();32         System.out.println(end2 - begin2); //輸出: 11  時間花費非常少33     }34 }
StringBuilder類

小結:

1、String:不可變得字串;

2、StringBuffer:可變的,是安全執行緒;

3、StringBuilder:可變的,是線程不安全,比StringBuffer效能高點;

4、String,StringBuffer,StringBuilder 都表示字元序列,介面都是CharSequence;

5、StringBuffer,StringBuilder中有很多和String中一樣的方法;

特有的方法: 主要是可以改變對象值中的方法(添加,刪除,插入,替換,反轉)

   

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.