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); } } } |