java注解(上)
JDK1.5新特性:注解
相當于一種標記,加上注解就等同加上了某種標記,以后javac編譯器、開發工具和其他程序可以用反射來了解這個類及各種元素上有無何種標記。有什么標記、就去干相應的事
標記可以加在:包、類、字段、方法、方法的參數以及局部變量上
java.lang包,可看到JDK中提供的最基本的Annotation
@Override
@Deprecated
@SuppressWarnings
表示關閉一些不當的編譯器警告信息
注解也相當于一個特殊的類
注解的應用結構圖:
注解類
應用了“注解類”的類
@interface A{
@A
class C{
}
class
B{
B.class.isAnnotationPresent(A.class);
a = B.class.getAnnotation(A.class);
}
元注解:為注解提供服務的注解稱為~
@Retention(RetentionPolicy.RUNTIME)
它的作用:使注解一直保留到一個時期,決定注解的生命周期,默認是CLASS
RetentionPolicy是一個枚舉,其中有三種取值:
分別對應
RetentionPolicy.SOURCE
RetentionPolicy.CLASS
RetentionPolicy.RUNTIME
當編譯器編譯java源文件時,可能會把“沒用的”注解從中去掉,編譯成class
當使用該類時,類加載器把class文件加載到內存中時,也會把“沒用的”注解從中去掉,生成內存中的字節碼
-------------------------------------------
@Retention(RetentionPolicy.RUNTIME)
//指定注解生命周期
@Target({ElementType.METHOD,ElementType.TYPE})
//指定注解作用的范圍
public @interface MyAnnotation {
}
-------------------------------------------
java自帶的3個注解:
@Override
@SupperessWarning -->SOURCE
@Deprecated --> RUNTIME
@Target(ElementType.METHOD) 注解:
指定注解的作用范圍,如方法前,等
-------------------------------------------
@MyAnnotation
public class AnnotationTest {
main(String[] args) {
stub
//過時方法
//哪個注解在不在
AnnotationTest.class.getAnnotation(MyAnnotation.class);
static void sayHello(){
-------------------------------------------
JDK1.5中,Interface Type接口
Class也實現了該接口,Type更準確,包含:Class interface enum