Annotation
attached with class, interface, methods, fields
annotation的內(nèi)容被java編譯器和JVM利用
annotation用來提供額外的信息嚷节,是XML和java marker interface的替代選擇
html是用來顯示數(shù)據(jù)的叁怪;xml是用來描述數(shù)據(jù)更振、存放數(shù)據(jù)的
java marker interface:沒有任何member的接口,給類做標(biāo)記歸類用漓藕,如Serializable, Cloneable
@Override
@Deprecated告訴編譯器此method不建議使用
*@Deprecated
*簡單來講就是,若某類或某方法加上該注解之后,表示此方法或類不再建議使用,
*調(diào)用時(shí)也會(huì)出現(xiàn)刪除線糕珊,但并不代表不能用,只是說毅糟,不推薦使用红选,因?yàn)檫€有更好的方法可以調(diào)用。
@SuppressWarning抑制警告
*抑制單類型的警告:
*@SuppressWarnings("unchecked")
*抑制多類型的警告:
*@SuppressWarnings(value={"unchecked","rawtypes"})
*抑制所有類型的警告:
*@SuppressWarnings("all")
自定義Annotation
//定義
public@interfaceAnnotationTest{
Stringvalue()default"method"
EnumTestvalue2();
}
enumEnumTest{
Class,Method
}
//調(diào)用 可用于class 也可用于method 在枚舉類型中加了參數(shù)來說明
@AnnotationTest(value="class",value2=EnumTest.Class)
publicclassAnnotationClient{
@AnnotationTest(value="method",value2=EnumTest.Method)
publicvoidmethod(){
//TODO auto-generated method stub
?? }
}
用來標(biāo)記annotation的
@Target? tag is used to specify at which type, the annotation is used.
@Inherited annotation不會(huì)默認(rèn)被子類繼承
@Document
@Retension 定義被它所注解的注解保留多久姆另,一共有三種策略喇肋,定義在RetentionPolicy枚舉中.
@Retention(RetentionPolicy.RUNTIME)
public@interfaceMyannotation{
Stringhello();
Stringworld();
}
*source:注解只保留在源文件,當(dāng)Java文件編譯成class文件的時(shí)候迹辐,注解被遺棄蝶防;被編譯器忽略
*class:注解被保留到class文件,但jvm加載class文件時(shí)候被遺棄右核,這是默認(rèn)的生命周期
*runtime:注解不僅被保存到class文件中慧脱,jvm加載class文件之后,仍然存在
*這3個(gè)生命周期分別對應(yīng)于:Java源文件(.java文件)--->.class文件--->內(nèi)存中的字節(jié)碼*默認(rèn)值是class
?