Java——包裝類(Wrapper)


2.7包裝類(Wrapper)

基本數據類型由於不是類,不能夠使用java類庫里提供的大量的方法。所有在設計上,我們讓每一個基本數據類型都對應一個類,同時數據存儲的范圍還不變。此時相當於基本數據類型就具有了類的特點。針對八種基本定義相應的引用類型—包裝類(wrapper 或封裝類)。有了類的特點,就可以調用類中的方法。

 

 

2.7.1 裝箱

基本數據類型包裝成包裝類的實例    ---裝箱

通過包裝類的構造器實現:

int i = 500;   Integer t = new Integer(i);

還可以通過字符串參數構造包裝類對象:

Float f = new Float(“4.56”);

Long l = new Long(“asdf”);  //NumberFormatException

2.7.2 拆箱

獲得包裝類對象中包裝的基本類型變量    ---拆箱

調用包裝類的.xxxValue()方法:

boolean b = bObj.booleanValue();

JDK1.5之后,支持自動裝箱,自動拆箱。但類型必須匹配。

2.7.3 字符串和基本數據類型的相互轉換

①字符串轉換成基本數據類型

通過包裝類的構造器實現:

int i = new Integer(“12”);

通過包裝類的parseXxx(String s)靜態方法:

Float f = Float.parseFloat(“12.1”);

②基本數據類型轉換成字符串

用字符串重載的valueOf()方法:

String fstr = String.valueOf(2.34f);

更直接的方式:

String intStr = 5 + “”

2.7.4 包裝類用法舉例

int i = 500;

Integer t = new Integer(i);

裝箱:包裝類使得一個基本數據類型的數據變成了類。

有了類的特點,可以調用類中的方法。

String s = t.toString(); // s = “500“,t是類,有toString方法

String s1 = Integer.toString(314); // s1= “314“  將數字轉換成字符串。

String s2=“4.56”;

double ds=Double.parseDouble(s2);   //將字符串轉換成數字

拆箱:將數字包裝類中內容變為基本數據類型。

int j = t.intValue(); // j = 500,intValue取出包裝類中的數據

包裝類在實際開發中用的最多的在於字符串變為基本數據類型。

String str1 = "30" ;

String str2 = "30.3" ;    

int x = Integer.parseInt(str1) ;       // 將字符串變為int型

float f = Float.parseFloat(str2) ; // 將字符串變為int型

 

我們需要掌握的:

基本數據類型、包裝類、String類之間的轉換!

 

 

簡易版:

①基本數據類型與對應的包裝類有自動裝箱、自動拆箱

如:int i = 10;

      Integer i1 = i;//自動裝箱

      int j = i1;//自動拆箱

②基本數據類型、包裝類---->String類:調用String類的重載的valueOf(Xxx xx);

  String類---->基本數據類型、包裝類:調用相應的包裝的parseXxx(String str);

注意:String str = "123";

         int i = (int)str;是錯誤的轉法。

特別的Boolean類型的  賦值有誤不會報異常,除了正確的返回true  其他一律返回false

代碼:

package com.atguigu.java;

import org.junit.Test;

基本數據類型包裝類String之間的相互轉換

public class TestWrapper {

       //基本數據類型、包裝類與String類之間的轉換

       @Test

       public void test2(){

              //基本數據類型、包裝類 --->String類:調用String類的重載的valueOf(Xxx x)方法

              int i1 = 10;

              String str1 = i1 + "";//"10"

              Integer i2 = i1;

              String str2 = String.valueOf(i2);

              String str3 = String.valueOf(true);//"true"

              str2 = i2.toString();

              System.out.println(str3);

              //String類--->基本數據類型、包裝類:調用包裝類的parseXxx(String str)方法

              int i3 = Integer.parseInt(str2);

              System.out.println(i3);

              boolean b1 = Boolean.parseBoolean(str3);

              System.out.println(b1);

              //int i4 = (int)str2;

       }

       //基本數據類型與包裝類之間的轉化

       @Test

       public void test1(){

              int i = 10;

              System.out.println(i);

              boolean b = false;

              //基本數據類型--->對應的包裝類:調用包裝類的構造器

              Integer i1 = new Integer(i);

              System.out.println(i1.toString());

             

              Float f = new Float("12.3F");

              System.out.println(f);

              //java.lang.NumberFormatException

              //i1 = new Integer("12abc");

              //System.out.println(i1);

              //對於Boolean來講,當形參是"true"返回true,除此之外返回false。

              Boolean b1 = new Boolean("false");

              System.out.println(b1);

             

              b1 = new Boolean("truea");

              System.out.println(b1);

             

              Order o = new Order();

              System.out.println("$ "+o.b);//null

              //包裝類--->基本數據類型:調用包裝類Xxx的XxxValue()方法。

              int i2 = i1.intValue();

              System.out.println(i2);

              float f1 = f.floatValue();

              System.out.println(f1);

              boolean b2 = b1.booleanValue();

             

              //JDK5.0以后,自動裝箱和拆箱

              int i4 = 12;

              Integer i3 = i4;//自動裝箱

              Boolean bb = false;

             

              int i5 = i3;//自動拆箱

       }

}

class Order{

       Boolean b;

}

2.7.5 Junit單元測試類

eclipse快捷鍵】

快速生成Junit測試類:

當前工程上鼠標右鍵àBuild Pathà Add Libraries… à Junit à next à 選擇Junit4àfinish

 

 

import org.junit.Test;

 

Junit單元測試類

①當前工程下-右鍵build path-add libraries-Junit4

②在主類中,創建一個空參的無返回值的方法,(如:public void test1())用於代碼的測試,方法上聲明:@Test

③導入import org.junit.Test;

④在test1()方法中,進行代碼的編寫。

⑤測試:雙擊方法名,右鍵run as-junit Test即可。

public class TestJunit {

       public static void main(String[] args) {

              String str = "AA";

              System.out.println(str);

       }

      

       @Test

       public void test2(){

             

       }

      

       @Test

       public void test1(){

              String str = "AA";

              System.out.println(str);

              m1();

       }

       public void m1(){

              System.out.println("hello world");

       }

}

2.7.6 包裝類練習題

利用Vector代替數組處理:從鍵盤讀入學生成績(以負數代表輸入結束),找出最高分,並輸出學生成績等級。

提示:數組一旦創建,長度就固定不變,所以在創建數組前就需要知道它的長度。而向量類java.util.Vector可以根據需要動態伸縮。

創建Vector對象:Vector v=new Vector();

給向量添加元素:v.addElement(obj);   //obj必須是對象

取出向量中的元素:Object  obj=v.elementAt(0);

注意第一個元素的下標是0,返回值是Object類型的。

計算向量的長度:v.size();

若與最高分相差10分內:A等;20分內:B等;30分內:C等;其它:D等

【代碼】

package com.jiang.exer;

 

import java.util.Scanner;

import java.util.Vector;

public class TestScore {

       public static void main(String[] args) {

              //1.創建Scanner的對象,提示從鍵盤輸入學生的成績(以負數代表輸入結束)

              Scanner s = new Scanner(System.in);

              System.out.println("請輸入學生的成績:(以負數代表輸入結束)");

       //2.for(;;),從鍵盤依次獲取學生的成績,並填入由Vector v=new Vector()創建的對象v中。

              Vector v=new Vector();

              int maxScore = 0;//記錄最高分

              for(;;){

                     int score = s.nextInt();

                     if(score < 0){

                            break;

                     }

                     //3.求出所有輸入的正的成績中的最高分

                     //獲取學生成績中的最高分

                     if(maxScore < score){

                            maxScore = score;

                     }

                     //依次將學生成績村放入v中

                     Integer score1 = new Integer(score);

                     v.addElement(score1);

              }

              //4.通過v.elementAt(i)依次獲取填入v中的元素,同時判斷一下各個分數的等級並輸出。

              for(int i = 0;i < v.size();i++){

                     Integer score = (Integer)v.elementAt(i);

                     char level;

                     if(maxScore - score <= 10){

                            level = 'A';

                     }else if(maxScore - score <= 20){

                            level = 'B';

                     }else if(maxScore - score <= 30){

                            level = 'C';

                     }else{

                            level = 'D';

                     }

                     System.out.println("學生成績為:" + score + ",等級為:" + level);

              }

       }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM