java注解

分类:按运行机制分有源码注解,编译时注解,运行时注解
源码注解:编译时丢弃
编译时注解:注解在源码和.class文件中都存在,编译时起作用@override、@Deprecated、@Suppvisewarnings。
运行时注解:在运行时还起作用@Autowired

元注解:注解的注解

@Target({ElementType.METHOD,ElementType.TYPE})//注解的作用域,有CONSTRUCTOR FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE
@Retention(RetentionPolicy.RUNTIME)//生命周期SOURCE,CLASS,RUNTIME 在什么阶段起作用
@Inherited 允许子类继承
@Document 生成javadoc时会包含注解的信息

自定义注解
//1成员必须无参无异常,类型有String,Class,Annotation,Enumeration,
//2如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
//3注解类可以没有成员,没有成员的注解为标识注解

public @interface Description{       //使用@interface关键字定义注解
        String desc();                           
        Stirng author();
        int age() default 10;                //4可以用default为成员指定一个默认值
}

使用注解的语法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值12,…)

@Description(desc="i am eyeColor",author="xiao chen",age=18)
public String eyeColor(){
     return "red";
}

使用注解

@Description(desc="yyy",author="xiao chen",age=19)
public class Child {    
    @Description(desc="yyy",author="xiao chen",age=19)
    public String name() {
        return null;
    }   
}

解析注解

public class ParseAnnotation {
    public static void main(String[] args){
        //1.使用类加载器加载类
        try {
            Class c=Class.forName("com.annotation.test.Child");
            //2.找到类上面的注解
            boolean isExist=c.isAnnotationPresent(Description.class);//判断是否存在Decription这个注解
            if(isExist){
                //3.拿到注解实例
                Description d=(Description)c.getAnnotation(Description.class);
                System.out.println(d.desc()+d.author()+d.age());
            }

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章