?? day17.txt
字號:
5.0新特性:
泛型:
泛型的形式:
<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對象可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -