JDK5.0以後的新特性

泛型、靜態導入、可變參數、增強for()循環、自動拆裝箱

一、泛型

1、概述:將原來具體的類型參數化,將數據類型(只能是引用數據類型)作爲一種參數傳遞,提高代碼的安全性;

2、格式:<數據類型>

3、位置:1)數組、集合在創建對象的時候

ArrayList<String> al = new ArrayList<String>();//後面的String叫作泛型推斷

ArrayList集合使用泛型<String>限定後則該集合就只能存儲String類型的元素,否則就會報錯

2)泛型定義在類、接口上

public class ObjectDemo<T>{//在類中就可以把T 當做Ojbect類型來使用

private T t;

public T get(){

return t;

}

}

3)泛型定義在方法上

public <T> void show(T t){//相當與需要傳入的參數是Object類型的

System.out.println(t);

}

4、通配符

<?>代表任意數據類型:可以是Object類型以及Java類

<? extends E>向下限定,要麼跟當前類型一樣,要麼是它的子類

<? super E>向上限定,保持當前類型一致,或者是他的父類

一般用在方法的參數中:

wKioL1mDI4zhlFt1AABM1fGnV_w430.png

5、作用

1)將運行時期的異常提前到了編譯期間

2)不用再強制類型轉換

3)解決了一個×××警告線的問題

egg:

wKiom1mDJBeDLfjvAABuq9aHqbQ801.png

二、增強for()循環 ———— 用於遍歷數組、集合

1、格式

for(數據類型 名稱 :需要遍歷的集合或者數組名){

System.out.println(名稱);//相當於循環了 集合.size() 多次,每次打印一個元素

}

2、注意事項

增強for()循環如同集合的迭代器遍歷方法,不能在循環內用集合的方法修改集合內的元素,否則就會報java.util.ConcurrentModificationException異常

egg://集合內如有bb就給集合添加元素dd

public class ForDemo {

public static void main(String[] args) {

ArrayList<String> al = new ArrayList<String>();

al.add("aa");

al.add("bb");

al.add("cc");

for(String s : al){

if(s.equals("bb")){

al.add("dd");//錯誤的寫法

}

}

}

}

3、嵌套遍歷

格式:ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

for(ArrayList arr : al){

for(String s : arr){

}

}

egg:

 wKioL1mDJNjjArAoAAB0P1NWDwE195.png

三、自動拆裝箱

1、概述:基本數據類型與其包裝類之間的自動相互轉換,無需強制轉型;

裝箱:就是自動將原始類型值轉換成對應的對象;

拆箱:將基本數據類型的對象自轉換成基本數據類型;

2、基本數據類型與其對應的包裝類

byte--------->Byte

short------->Short

int--------->Integer

long-------->Long

float------->Float

double------>Double

boolean----->Boolean

char-------->Character

3、優缺點

優點:降低代碼量,方便使用

弊端:有可能會影響程序的性能

egg:Integer num = 0;

for(int i = 0;i < 1000;i++){

num += i;

}

在這裏,num每次循環進去時候是Integer類型,num += i;時候自動拆箱成int類型,出循環再自動裝箱成Integer類型,在龐大的循環中會大大的降低程序的性能,生成無用對象增加GC壓力;

所以,在使用中儘量避免。

四、靜態導入

1、概述一個類中只要有靜態方法就能使用靜態導入,使其靜態方法在本類中直接可見

2、格式:import static java.包名.類名.方法;

egg:import static java.lang.Math.random;//靜態導入Math類中的random()方法;

import static java.lang.Math.*;//靜態導入Math類中的所有靜態方法;

3、使用:直接使用方法名調用

egg:import static java.lang.Math.*;

public class MathDemo {

public static void main(String[] args) {

random();

abs(-1);

pow(3, 2);

sqrt(4);

}

}

4、注意事項:

1)如果要使用靜態導入,爲了防止在一個類中出現同名的方法,那麼調用的時候需要前綴來區別開來;

2)過度的使用靜態導入會使代碼的可讀性降低。

五、可變參數

1、概述:參數類型相同,個數不確定時,將其看作一個數組處理————可變參數

2、格式:修飾符 返回值類型 方法名(參數類型...變量名){}

egg:public static int add(int ... x){//這裏的 int...x 相當與一個暫時不知道長度的數組 int[]x;

int num = 0;//在使用add()方法時候,添加幾個參數,數組長度就是多少;

for(int i = 0; i < x.length;i++){

num += x[i];

}

return num;

}

3、特點

1)如果方法中有多個參數,那麼可變參數必須在最後一個;

2)可變參數在實際傳參的時候就知道到底有多少個了;

3)在使用時,相當與創建了一個數組,可使用循環遍歷,如上egg。

六、枚舉類

1、枚舉概述: 就是一個類只能存在幾個固定的對象,那麼這個就是枚舉.我們就可以使用這些對象可以表示一些固定的值.

    舉例:一週只有7天,一年只有12個月等。

2、枚舉類:

    定義枚舉類要用關鍵字enum

    所有枚舉類都是Enum的子類

    枚舉類的第一行上必須是枚舉項,最後一個枚舉項後的分號是可以省略的,但是如果枚舉類有其他的東西,這個分號就不能省略。建議不要省略

    枚舉類可以有構造器,但必須是private的,它默認的也是private的。枚舉項的用法比較特殊:枚舉(“”);

    枚舉類也可以有抽象方法,但是枚舉項必須重寫該方法

    枚舉在switch語句中的使用

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