1、註解是什麼
java中的註解(Annotation),也叫元數據。是Java 5以後版本引入的一個特性。
註解與類、接口、枚舉是在同一個層次,可以用來標註包、類、字段、方法、局部變量、方法參數等元素,達到對這些元素的描述和說明。
註解是可以允許jvm在運行中讀取它,這一點與註釋完全不同。並且包含多種加載策略,可以靈活配置。
瞭解註解、註釋區別看這裏:註解、註釋有什麼區別
如何自定義註解看這裏:如何使用註解
2、註解有哪些加載策略
註解包含3中可配置的加載策略(RetentionPolicy),根據不同的需要進行不同的配置,具體如下:
public enum RetentionPolicy {
// 此類型會被編譯器丟棄
SOURCE,
// 此類型註解會保留在class文件中,但JVM會忽略它,默認策略
CLASS,
// 此類型註解會保留在class文件中,JVM會讀取它
RUNTIME
}
3、註解有什麼作用
註解主要功能有以下幾點:
編寫文檔
通過代碼裏標識的元數據生成文檔,這一點與註釋類似。代碼分析
通過代碼裏標識的元數據對代碼進行分析,一般使用反射獲取註解信息。編譯檢查
通過代碼裏標識的元數據讓編譯器能夠實現基本的編譯檢查,例如方法覆蓋@Override。
4、JDK有那些內置註解
jdk提供了若干內置註解,常見的如下:
@Override
它用來對覆蓋父類方法、實現接口方法進行標記,如果被標記的方法並沒有實際覆蓋父類方法,則編譯器會發出錯誤警告。
例子:
public class SuperTest {
public String tostring() {
return "父類";
}
}
public class Test extends SuperTest {
@Override
public String tostring() {
return "子類註解";
}
}
@Deprecated
它用來標記過期方法、不推薦使用方法。對於某些已經過期、不推薦使用的方法,但又不能直接刪除(有其他地方仍使用),我們會使用@Deprecated進行標記,當使用這些方法時,會在編譯時進行提示。
例子:
public class Test {
public static void main(String[]args) {
// 使用DeprecatedClass裏聲明被過時的方法
DeprecatedClass.DeprecatedMethod();
}
}
class DeprecatedClass {
@Deprecated
public static void DeprecatedMethod() {
}
}
@SuppressWarnings
它用來標記不想被提示的警告,警告類型可以通過參數控制,具體如下:
deprecation,使用了過時的類或方法時的警告
unchecked,執行了未檢查的轉換時的警告
fallthrough,當Switch程序塊直接通往下一種情況而沒有Break時的警告
path,在類路徑、源文件路徑等中有不存在的路徑時的警告
serial,當在可序列化的類上缺少serialVersionUID定義時的警告
finally,任何finally子句不能正常完成時的警告
all,關於以上所有情況的警告
例子:
public class Test {
public static Listlist = newArrayList();
@SuppressWarnings("unchecked")
public void add(String data) {
list.add(data);
}
}