国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

黑馬程序員——【Java高新技術】——JDK1.5新特性:靜態導入、可變參數、增強型for循環、自動裝箱拆箱、枚舉

2019-11-14 21:16:55
字體:
來源:轉載
供稿:網友
黑馬程序員——【java高新技術】——JDK1.5新特性:靜態導入、可變參數、增強型for循環、自動裝箱拆箱、枚舉

---------- android培訓、java培訓、期待與您交流! ----------

一、靜態導入

  1、import和import static區別:

 ?。?)import 是導入一個類或某個包中所有的類。

 ?。?)import static是導入一個類中的某個靜態方法或所有的靜態方法。

  注:在調用靜態導入的類的靜態方法時,可以不用再寫類名。如Arrays.sort(int[])可以直接寫sort(int[]);

  2、靜態導入的寫法:

  (1)import static java.util.Arrays.*; 表示導入Arrays類中的所有靜態成員。

 ?。?)import static java.lang.System.*; 表示導入System類中所有的靜態成員。

  3、靜態導入注意事項:

 ?。?)當導入的兩個類中有同名成員時,需要在成員前加上相應的類名。

 ?。?)當類名重名時,需要指定具體的包名。

 ?。?)方法重名時,需要指定具體所屬的對象或者類。

二、可變參數

  1、為什么引入可變參數?

  如果一個方法在參數列表中傳入多個參數,個數不確定,那么每次都要重載該方法,代碼重復太多。雖然可以用數組作為形式參數,但是給形參傳遞數據時,每次都需要定義一個數組對象,作為實際參數,麻煩。于是在JDK1.5版本后,就提供了一個新特性:可變參數。

  2、可變參數的書寫格式:

  在形式參數的變量類型和變量名之間,加入三個點 … ,前后有無空格皆可。例如:

  add(int… x){};

  3、可變參數特點:

 ?。?)可變參數必須定義在參數列表的最后;

 ?。?)…位于“變量類型”和“變量名”之間;

 ?。?)可變參數其實就是數組參數的簡寫形式,編譯器為該可變參數隱式創建一個數組,在方法體中以數組的形式訪問可變參數。

三、增強型for循環

  1、格式:

  for(數據類型 變量名 : 被遍歷的集合(collection)或者數組) {執行語句}

  2、說明

 ?。?)對集合進行遍歷。只能獲取集合元素。但是不能對集合進行操作??梢钥醋魇堑鞯暮唽懶问?。

  (2)迭代器除了遍歷,還可以進行remove集合中元素的動作。如果使用ListIterator,還可以在遍歷過程中對集合進行增、刪、改、查的操作。

 ?。?)增強型for循環的變量類型前可加修飾符,如final(可被局部內部類訪問到)。

  3、傳統for和高級for的區別:

 ?。?)傳統for循環可以完成對語句的多次操作,因為可以控制循環增量條件。在遍歷數組時有角標索引。

 ?。?) 高級for循環是一種簡化形式,它必須有遍歷目標,該目標要么是array或Collection單列集合,不可以直接遍歷Map集合,但可以將Map集合轉化為單列的Set集合,就可以使用。例如:

1 for( Map.Entry<Integer , String>) me : map.entrySet()){2 3        Integer key = me.getKey();4 5        String value = me.getValue();6 7        System.out.PRintln(key + “::” +value);8 9 }

四、基本數據類型的自動拆箱與裝箱

  1、自動裝箱:Integer iObj = 3;

  2、自動拆箱:iObj + 2;

  3、對于基本數據類型的說明:整數在-128 ~ 127之間的數,包裝成Integer類型對象,會存入常量池中的緩存,再創建一個對象的時候,如果其值在這個范圍內,就會直接到常量池中尋找,因為這些小數值使用的頻率很高,所以緩存到常量池中,被調用時就方便很多。

  4、享元模式(flyweight):

  描述:有很多個小的對象,它們有很多屬性相同,把屬性相同的部分變成一個對象,這些相同的屬性稱為這個對象的內部狀態(intrinsic)。把那些不同的屬性變成方法的參數,稱之為外部的狀態(extrinsic)。這種優化內存,只創建一個對象的模式,稱之為享元模式。

  例如:Integer對象中對象的取值范圍在-128~127時,其值相同的對象相同,因為這些小的數被調用的頻率較高,所以被緩存在一個池中以備隨時調用。這樣就不用在創建新的對象,這就是典型的享元設計模式。

五、枚舉

 ?。ㄒ唬└攀?/strong>

  1、枚舉:就是要讓某個類型的變量的取值只能為若干個固定值中的一個,否則,編譯器就會報錯。枚舉可以讓編譯器在編譯時就可以控制源程序中填寫的非法值,普通變量的方式在開發階段無法實現這一目標。它是java1.5中增加的一個新特性。

  2、用普通類模擬枚舉的實現原理,代碼示例:

 1 /*  普通類定義一個Weekday的類來模擬枚舉功能。 2  3     1、私有的構造方法 4  5     2、每個元素分別用一個公有的靜態成員變量表示 6  7     3、可以有若干公有方法或抽象方法。采用抽象方法定義nextDay就將大量的if.else語句轉移成了一個個獨立的類。 8  9 */10 11 public abstract class WeekDay {12 13        //構造函數被私有化,禁止別人創建對象14 15     private WeekDay(){}16 17        //將每一個元素,定義為靜態常量18 19     public final static WeekDay SUN=new WeekDay(){20 21         public WeekDay nextDay(){22 23             return MON;24 25         }26 27     };28 29     public final static WeekDay MON=new WeekDay(){30 31         public WeekDay nextDay(){32 33             return SUN;34 35         }36 37     };38 39     public abstract WeekDay nextDay();40 41     public String toString(){42 43         return this==SUN?"SUM":"MON";44 45     }46 47 }

 ?。ǘ┟杜e的基本應用

  1、概述

  (1)通過enum關鍵字定義枚舉類,枚舉類是一個特殊的類,每個元素都是該類的一個實例對象。

 ?。?)用枚舉類規定值,如上面的WeekDay類。以后用此類型定義的值只能是這個類中規定好的值,若不是這些值,編譯器不會通過。

 ?。?)在編譯時期就會發現錯誤,減少了運行時期的錯誤。

 ?。?)如果調用者想打印枚舉類中元素的信息,需由編寫此類的人定義toString方法。

  注:枚舉類是一個class,而且是一個不可被繼承的final類,其中的元素都是類靜態常量。

  2、枚舉常用方法

  (1)構造方法

   ① 構造方法,只在構造枚舉值的時候被調用。

   ② 構造方法只有private的,沒有public的。這樣禁止枚舉實例對象被外部定義。枚舉值是public static final的常量,枚舉類的方法和數據域是可以被外部訪問的。

  ?、?構造函數可以有多個,調用哪個即初始化相應的值。

 ?。?)靜態方法

   ① valueOf(String e):轉為對應的枚舉對象,即將字符串轉為對象

  ?、?values() :獲取所有的枚舉對象元素

 ?。?)非靜態方法

   ① String toString():返回枚舉量的名稱

   ② int ordinal():返回枚舉值在枚舉類中的順序,按定義的順序排

   ③ Class getClass():獲取對應的類名

  ?、?String name():返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明。

  3、示例代碼:

 1 public class EnumDemo { 2  3     public static void main(String[] args) { 4  5         WeekDay weekday = WeekDay.MON; 6  7         System.out.println(“1”+weekDay);//輸出枚舉常量名 8  9         System.out.println(“2”+weekDay.name());//輸出對象名10 11         System.out.println(“3”+weekDay.getClass());//輸出對應類12 13         System.out.println(“4”+weekDay.toString());//輸出枚舉對象名14 15         System.out.println(“5”+weekDay.ordinal());//輸出此對象在枚舉常量的次序16 17         System.out.println(“6”+WeekDay.valueOf("WED"));//將字符串轉化為枚舉常量18 19         System.out.println(“7”+WeekDay.values().length);//獲取所以的枚舉元素,并打印其長度20 21     }22 23     //定義枚舉內部類24 25     public enum WeekDay{26 27         SUN(1),MON,TUE,WED,THI,FRI,SAT;//分號可有可無,但如果下面還有方法或其他成員時,分號不能省。并且當有其他方法時,必須在這些枚舉變量的下方。28 29  30 31         //無參構造器32 33         private WeekDay(){34 35             System.out.println("First");36 37         }38 39         //帶參數的構造器40 41         private WeekDay(int day){42 43             System.out.println("Second");44 45         }46 47     }48 49 }

  (三)枚舉的高級應用

  1、枚舉:就相當于一個類,其中也可以定義構造方法、成員變量、普通方法和抽象方法。

  2、枚舉元素:必須位于枚舉體中的最開始部分,枚舉元素列表的后要有分號與其他成員分隔。把枚舉中的成員方法或變量等放在枚舉元素的前面,編譯器報告錯誤。

  3、帶構造方法的枚舉

 ?。?)構造方法必須定義成“私有“。

  (2)如果有多個構造方法,該如何選擇?

 ?。?)枚舉元素MON和MON()的效果一樣,都是調用默認的構造方法。

  4、帶方法的枚舉

  (1)定義枚舉TrafficLamp

 ?。?)實現普通的next方法

  (3)實現抽象的next方法:每個元素分別是由枚舉類的子類來生成的實例對象,這些子類采用類似內部類的方式進行定義。

  (4)增加表示時間的構造方法

  * 代碼示例:

 1 public class EnumTest { 2  3     public enum TrafficLamp{ 4  5         RED(30){ 6  7             public TrafficLamp nextLamp(){ 8  9                 return GREEN;10 11             }12 13         },14 15         GREEN(30){16 17             public TrafficLamp nextLamp(){18 19                 return YELLOW;20 21             }22 23         },24 25         YELLOW(5){26 27             public TrafficLamp nextLamp(){28 29                 return RED;30 31             }32 33         };34 35         private int time;36 37         //構造器38 39         private TrafficLamp(int time){40 41             this.time=time;}42 43         //抽象方法44 45         public abstract TrafficLamp nextLamp();46 47     }48 49 }

---------- android培訓、java培訓、期待與您交流! ----------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀化市| 民权县| 宁海县| 夏津县| 兴业县| 湖北省| 沙田区| 嘉黎县| 宿迁市| 泾川县| 台东县| 元谋县| 阿拉尔市| 甘谷县| 交城县| 恩平市| 凌云县| 鲁山县| 濮阳县| 大姚县| 渝中区| 永清县| 库伦旗| 灵寿县| 永平县| 灵石县| 怀集县| 凤城市| 江口县| 阿克| 崇仁县| 容城县| 肇东市| 靖安县| 石柱| 綦江县| 东阳市| 巴青县| 柳林县| 高密市| 前郭尔|