JDK 5.0 的新语法
生活随笔
收集整理的這篇文章主要介紹了
JDK 5.0 的新语法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
“JDK1.5”(開發代號猛虎)的一個重要主題就是通過新增一些特性來簡化開發,這些特性包括泛型,for-each循環,自動裝箱/拆箱,枚舉,可變參數, 靜態導入。 使用這些特性有助于我們編寫更加清晰,精悍,安全的代碼。下面我們簡單介紹一下這些新特性。
1.????????? 泛性編程 ???????? C 通過模板技術可以指定集合的元素類型,而Java在1.5之前一直沒有相對應的功能。一個集合可以放任何類型的對象,相應地從集合里面拿對象的時 候我們也不得不對他們進行強制得類型轉換。猛虎引入了泛型。例子如下: ArrayList<String> list = new ArrayList<String>(); list.add(new String("Hello!")); System.out.println(list.get(0)); 2.????????? 自動裝箱/拆箱 ???????? Java中經常需要在原始數據類型和它們的包裝類之間轉換,尤其是將數據放入Collection容器中和取出來時。為了減少這些重復代碼,JDK 5.0添加了自動裝箱/解箱操作,從此之后,基本上可以將原始數據類型當作對象來操作了。 ???????? 自動裝箱:指開發人員可以把一個基本數據類型直接賦給對應的包裝類。 ???????? 自動拆箱:指開發人員可以把一個包裝類對象直接賦給對應的基本數據類型。 ??????? 例:public void test(){ ????? ??????????????? Integer i = 1000; //裝箱 ????? ??????????????? int c =?i; //拆箱 ???? ????????????????? //典型的應用案例 ????? ??????????????? List list = new ArrayList(); ????? ??????????????? list.add(12); //裝箱 ????? ??????????????? int temp = (Integer)list.get(0); //拆箱 ??????????????? } 3.????????? 增強的循環結構(for-each循環) ???????? 引入增強for循環的原因:在JDK5以前的版本中,遍歷數組或集合中的元素,需先獲得數組的長度或集合的迭代器,比較麻煩!加入這種循環方式也是為了簡化一些代碼開發,尤其是對Collection容器的遍歷,以前都需要得到Iterator,然后調用next()得到下一個對象,調用hasNext()判斷是否還有,要不停寫這種重復的代碼,用foreach則很簡單。因此JDK5中定義了一種新的語法——增強foreach循環,以簡化此類操作。增強for循環只能用在數組、或實現Iterable接口的集合類上, 語法格式:?? for(變量類型 變量 :需迭代的數組或集合){具體代碼 }????????????????????????????????????????? 例: int data[] = { 1, 2, 3, 4, 5 }; ???????? for(int j : data) ??? ?????????? System.out.println(j); 4.????????? 枚舉類型 ???????? Java添加了對枚舉類型的支持,使用enum關鍵字進行定義。下面是一個例子: ???????? ???????? public enum Meal {BREAKFAST, LUNCH, SUPPER}; ???? ???????? public static void main( String[] args ) { ???????? ????????? Meal m = Meal.BREAKFAST; ???????? ????????? System.out.println( m );????????????????????????? ?????????????????? } ??? 其中定義的每一個常量都是Meal的一個實例。可以看到枚舉類型的定義非常像一個類,可以有方法,可以有構造函數,不過構造函數不能是public或者protected的;此外實例必須在一開始就定義。另外就是enum不能被繼承,因為事實上定義了一個enum后,編譯器會自動生成一個繼承了java.lang.Enum的同名的類,而Java是不支持多重繼承的,所以定義的enum就不能被繼承了,這一點在某些時候帶來了一些限制,比如想重用代碼來擴展enum時。此外,注意上面定義中的語法,各個實例間用逗號分隔,實例全部結束后用分號。 ??? 枚舉類型還定義了一些方法:toString(), values()和ordinal()等。 ??? enum還支持靜態導入,支持用在switch語句中。 5.????????? 靜態導入 ???????? 靜態導入非常簡單,就是將一個類的靜態變量或者方法導入,這樣在引用時就不需要再寫類名了,減少了代碼輸入的工作量。例子如下: import static java.lang.System.out; public class StaticImport {??? ???? public static void main( String[] args ) { ???????? out.println( "Good" ); ???? } } 代碼中用了最常用的輸出語句,原來需要寫System.out.println(),現在將out靜態導入,則只需寫out.println() 通常導入的語句也可以寫成import static java.lang.System.*來將該類中的所有靜態變量和方法都導入。可以看到靜態導入是非常簡單的,只需記住雖然該特性一般稱為“靜態導入(static import)”,寫代碼時卻要寫成“import static”。 6.????????? 可變參數列表 ???????? 從C中借鑒來的功能,如果方法想要接受任意數目的參數的話,就可以用,得到的參數則用foreach語法一個一個讀出來。以前則可能需要用一大堆的重載方法。形式如: ?void argtest(Object ... args) { ??? for(int i = 0; i < args.length; i++) ??????? System.out.println(i); ?} ?例子如下: ??public class Test {??? ????? public static void test( int...values ) { ????????? System.out.println( values.length ); ????????? for ( int i : values ) { ????????????? System.out.println( i ); ????????? } ??? ??}??? ????? public static void main( String[] args ) { ????????? test( 1 ); ???????? test( 1, 2 ); ???????? test( 1, 2, 3 ); ???? } }上面代碼中可以看到,可變參數列表還有個屬性是length。 然后我們可以這樣調用這個函數: argtest(1); argtest(1, 2, 4, 5, 6); ? 7.????????? 格式化輸出 System.out.printf("This is a test: %4.2f\n", 123.123); 這就會打印出:This is a test: 123.12 8.????????? 從終端讀取數據 ???????? 剛開始接觸Java 的時候,我怎么也不能用Java 在終端像C一樣方便的讀取數據。要從終端讀取一個整數我以前是這么弄的: try { ??? BufferedReader reader = new BufferedReader(new ????????????? InputStreamReader(System.in)); ??? int i = Integer.parseInt(reader.readLine()); } catch(IOException e) { } 現在好了,Java 里面引入了一個Scanner(),可以方便的從終端讀取數據: public class ScannerExample{ ???????? public static void main(String[] args){ ?????????????????? Scanner read = new Scanner(System.in); ?????????????????? int i = read.nextInt(); ?????????????????? System.out.println(“輸入的i=”+i); ???????? } }轉載于:https://blog.51cto.com/woke1228/552823
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JDK 5.0 的新语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ogre读取中文路径名的文件失败的解决办
- 下一篇: Socket编程实践(8) --Sele