jdk1.5新特性

1、靜態導入
   示例:
       package cn.zuxia.test;
       /**
        * 這裏就是靜態導入
        */
       import static java.lang.Math.*;  //通過靜態導入導入Math類的所有靜態方法

       public class Test01 {

             public static void main(String[] args) {
    
                   System.out.println(max(3, 6)); //這裏直接使用的max方法,而不是Math.max()
             }
       }
 
2、可變參數
   作用:一個方法接受的參數個數不固定
   特點:
       * 只能出現在參數列表的最後
       * ...位於變量類型和變量名之間,前後有無空格都可以
       * 調用可變參數的方法時,編譯器爲該可變參數隱含創建一個數組,在方法體中以數組的形式訪問可變參數
   示例:
       public static void main(String[] args) {
             add(2, 3, 5, 6);
       }
 
       public static void add(int ... args) {
             System.out.println(args[0]);
             for (int j = 0; j < args.length; j++) {
                   System.out.println(args[j]);
            }
        }

 

3、for循環加強
   語法:for([final] Type 變量名 : 集合變量名) {......}
   注意事項:
       * 迭代變量變量必須在()中定義
       * 集合變量名可以是數組或實現了Iterable接口的集合類
   示例:
       public static void main(String[] args) {
             add(2, 3, 5, 6);
       }
 
       public static void add(int ... args) {
             System.out.println(args[0]);
             for (int arg : args) {
                  System.out.println(arg);
             }
       }
    大家可以去下載sun公司的語言規範

 

4、基本類型的自動裝箱與拆箱
      Integer obj1 = 3;  //自動裝箱
      System.out.println(obj1 + 3);  //自動拆箱

      Integer s1 = 3;
      Integer s2 = 3;
      System.out.println(s1 == s2);  //true

      Integer s3 = 223;
      Integer s4 = 223;
      System.out.println(s3 == s4);  //false
      問題在於Interger在-128~127時是一個對象,大於127就是另一個對象,這就是享元模式

      * 享元模式:當對象很小,而且很多地方都要使用,這時我們就可以把這些對象用一個對象來表示,如abcacd如果每個字母都是一個對象,那麼這時的對象就很多了(6個),我們可以把a作爲一個對象,當再次使用a時,我們就把這些對象作爲一個對象(4個:串中有兩個a、c我們把他們看做一個對象)。--->個人理解,詳情請看:http://yangchao890.blog.163.com/blog/static/2185791120090221257225/

 

5、枚舉
   作用:枚舉就是讓某個類型的變量的取值爲若干個固定值的一個否則,編譯器就會報錯。枚舉可以讓編譯器在編譯時就可以控制程序中的非法值,普通變量的方式在開發階段無法實現這一目標。

   *用普通類如何實現枚舉功能,定義一個Weekday的類來模擬枚舉功能
       1)、私有的構造方法
       2)、每個元素分別用一個公有的靜態成員表示
       3)、可以有若干公有方法或抽象方法, 例如:要提供nextDay必須是抽象的。採用抽象方法定義nextDay就將大量的if.else語句轉移成了一個個獨立的類。
    示例:
        EnumTest.java

        WeekDay weekday = WeekDay.MON;
        System.out.println(weekday.nextDay());
        System.out.println(weekday.toString());
 
        WeekDay.java

        public abstract class WeekDay {
        private WeekDay() {
  
        }
 
        public final static WeekDay SUN = new WeekDay() {

               @Override
               public WeekDay nextDay() {
                       return MON;
               }
  
         };
 
        public final static WeekDay MON = new WeekDay() {
  
              @Override
               public WeekDay nextDay() {
                     return SUN;
              }
         };
 
       public abstract WeekDay nextDay();
 
           /*public WeekDay nextDay() {
                    if (this == SUN) {
                         return MON;
                   } else {
                         return SUN;
                   }
              }*/
 
            public String toString() {
                   return this == SUN ? "SUN" : "MON";
            }
 
   *枚舉的基本應用
    語法:public enum enum_name {
                   enum_value1,enum_value2,enum_value3......
            }

    常用靜態方法:name、ordinal、valueof、values、toString
    總結:枚舉是一個特殊的類,其中枚舉中的每一個元素都是該類的一個實例對象。

   *枚舉中的構造方法
    示例:
 public enum Number {
  one(1),  //調用的是第二個構造方法
  two(),  //調用的是第一個構造方法
  three,four;
  
  private Number() {}
  
  private Number(int order) {}
 }  
     注意:枚舉中的構造方法必須是私有的 

   *帶有抽象方法的枚舉  
    示例:
 public enum TrafficLamp {
  RED(30){
   public TrafficLamp nextLamp() {
    return GREEN;
   }
  },
  
  GREEN(45){
   public TrafficLamp nextLamp() {
    return YELLOW;
   }
  },
  
  YELLOW(5){
   public TrafficLamp nextLamp() {
    return RED;
   }
  };
  
  public abstract TrafficLamp nextLamp();
  private int time;
  
  private TrafficLamp(int time) {
   this.time = time;
  }
 }  

   *枚舉只有一個成員時,就可以作爲一種單例的實現方式         

發佈了30 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章