FourteenthDay--Java基礎(十二)5.0新特性

5.0新特性:


 1、自動裝箱,自動解箱(簡單類型->對象類型)
  小於127的數值在自動裝箱時只做一次裝箱,做" == "時相等。
  null無法自動解箱。
  先裝箱後賦值和先解箱後賦值時,需要注意是否能夠匹配。
  
 2、靜態import
  用於導入類中的靜態屬性和靜態方法。
  格式:import static 包名.類名.屬性/方法/*
  注意:
   必須是靜態的成員。
   靜態導入時,不允許導入同名方法/屬性。
   使用時,可省略" 類名. "就像使用本類方法一樣
   
 3、增強for循環:for(  :  )
  方式統一,可以處理數組和集合。  
  不可以同時對兩個以上的集合進行操作。
  不支持刪除元素。
  
 4、可變長的參數:(...)
  用於取代數組,實際上還是按數組進行處理,允許傳遞非數組的值(0到n個,中間用逗號分隔)。
  可變長參數只能出現一次,且一定會放在參數列表的最後。
  作參數時,可變長參數可以不傳,但數組不可以。
  
 5、格式化輸入輸出:Scanner類
  瞭解下就可以,知道有這個類就OK。
 
 6、枚舉Enum:本質上也是一個類,具有類所有特性
  格式:
   enum 枚舉名{
    枚舉值1,
    枚舉值2,
    .....
   }
   
  特性:
   顯示一些同類型的清單。
   一個枚舉值就是一個枚舉對象。
   可以有構造器,但不能是public的。
   具有一個私有的默認無參的構造器,顯式構造後,默認的構造器會消失。
   屬性,方法和類一樣。
   枚舉是final的(對於外部無法繼承),但在內部可以去實現。
  
  注意:
   清單裏的類,會調用匹配的構造器,如無,則會報錯。
   在枚舉中可以有抽象方法,但在清單中的所有子類都必須實現他。
   如果要寫屬性和方法,則最後的一個枚舉值要以分號結束。
   枚舉中的values()方法會返回枚舉中的所有枚舉值:  Color[] ss = Color.values(); 
  
 7、泛型

 8、元數據(註釋),項目中推廣度一般
 
 


 泛型:
  泛型的形式:
   <E>
   <E extends 類型>
   <E extends Numner&comparator>  類名&接口,表示E繼承Numner類實現comparator接口
   <?>  泛型通配符表示任意類型,僅用於傳參
   <? extends 類型>  表示這個類型可以是該類或者該類的子類。
   <? super 類型>  表示這個類型可以是該類或者該類的父類。   
   
  泛型的優點:
   指定泛型後,取出數據時不需要進行強制類型轉換,可以直接賦值給相應類型。
   可以限定集合中的元素類型,保證集合中的元素是按照要求放入的。 
   可以增強多態(繼承多個接口而無需寫繼承類)。
   保證參數有效。

  泛型的侷限性:   
   不能實例化泛型
    T t = new T(); //error
   數組不可用泛型限定
    List<String>[] list = new List<String>[10]; //錯誤
    E[] a = new E[10]; //錯誤
   類的靜態變量不能聲明爲類的泛型類型
    public class GenClass<T> {
       private static T t;   //編譯錯誤
    }
   靜態方法可以是泛型方法(在修飾符和返回值之間寫泛型),但是不可以使用類的泛型。
    static void copyArrayToList(Object[] os,List<T> ls){
      //錯誤,T爲類的泛型
    }
    
    static <E> void copyArrayToList(E[] os,List<E> ls){
      //泛型方法,正確的
    }
   泛型不能使用簡單類型
    GenList<int> nList = new GenList<int>(); //編譯錯誤 
   泛型類不能是異常類,也就是該泛型類不能繼承自Throwable以及其子類
    public class MyExpection<T> extends Exception{ }   //編譯錯誤
   可以拋出(throws)泛型類,但catch的參數不能是泛型類。
  
  注意:
   編譯時類型的泛型和運行時類型的泛型一定要一致,沒有多態。
   支持泛型的集合,只能存放指定的類型,或者是指定類型的子類型。 

 註釋(元數據):
  描述代碼的代碼,作用是規範編譯器的語法。

  三種內置註釋:
   @Deprecated 所標註的程序元素是不推薦使用的
   @Override 檢查是否爲合法的覆蓋父類的方法
   @SuppressWarnings 註釋類或方法,忽略其中的某些類型的警告信息
   
  註釋的三種類型:
   標記註釋:不需要任何參數
    @Override
    @Deprecated
   單值註釋:有一個值的註釋
    @註釋名(值名=值)
    值名一般爲value,可以省略的,直接寫值就可以
    值的類型是有限制的,只能是以下幾種:
     8種基本數據類型
     String
     Class
     Enum
     Annotation
     以及他們的數組
   多值註釋:每個值之間用逗號隔開
   
  四種元註釋:java.lang.annotation中的類
   元註釋:註釋註釋的註釋,用來限定註釋的特徵
   @Terget 用來限定某個註釋的使用範圍,可以對什麼元素進行註釋
   @Retention  用來描述註釋的有效範圍
   @Inherited  用來描述某註釋是否有繼承性
   @Documented  用來限定註釋的信息是否能夠進行文檔化
   
  自定義註釋:
   在自定義註釋時,要用元註釋來進行描述。
   如:
    import java.lang.annotation.*;
    @Target({ElementType.METHOD})
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface InProgress {
     String author(); //定義屬性
     String limited();
    }
    
  解析註釋:利用反射
   1、Class.forName()
   2、getMethod
   3、判斷是否有註釋
   4、getAnnotation
   
併發線程:
 三個多線程包:
  java.util.concurrent    包含了常用的多線程工具,是新的多線程工具的主體。
  java.util.concurrent.atomic    包含了不用加鎖情況下就能改變值的原子變量。
  java.util.concurrent.locks    包含鎖定的工具。
  
 Executor接口:
  替代了Thread類,他可以創建定量的、動態的以及週期性的線程池。
 ExecutorService接口:
  線程池,用來存放線程來節省創建和銷燬資源的消耗。
  
 Callable和Future接口:
  Callable是類似於Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務。Callable和Runnable有幾點不同:
   Callable規定的方法是call(),而Runnable規定的方法是run().
   Callable的任務執行後可返回值,而Runnable的任務是不能返回值的。
   call()方法可拋出異常,而run()方法是不能拋出異常的。
  運行Callable任務可拿到一個Future對象,通過Future對象可瞭解任務執行情況,可取消任務的執行,還可獲取任務執行的結果。

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