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對象可瞭解任務執行情況,可取消任務的執行,還可獲取任務執行的結果。