笔记总结:Java高级——注解

注解

一、概述

1.作用

让其他程序根据注解信息知道怎么运行该程序。

2.自定义注解
public @Interface 注解名{
    public 属性类型 属性名() default 默认值;
}
3.使用注解
@Test(value = "xxx", name = "xxx")

如果注解只有一个属性value(或其他注解都有默认值),则可以不用注明这个属性

@Test("xxx")
4.注解原理
  • 注解本质是一个接口,继承了Annotation接口,其属性都是抽象方法
  • @注解(…)本质是一个实现类对象

二、元注解

1.作用

修饰注解的注解

2.常见元注解
  • @Target:声明被修饰的注解能在哪些地方使用

    @Target(ElementType.TYPE, ElementType.FIELD)
    
    1. TYPE:类,接口
    2. FIELD:成员变量
    3. METHOD:成员方法
    4. PARAMETER:方法参数
    5. CONSTRUCTOR:构造器
    6. LOCAL_VARIABLE:局部变量
  • @Retention:声明注解的保留周期

    @Retention(RetentionPolicy.RUNTIME)
    
    1. SOURCE:只用于源码阶段,字节码文件不存在
    2. CLASS(默认):保留字节码文件,运行时不存在
    3. RUNTIME(常用):保留到运行阶段

三、注解的解析

1.定义

判断是否存在注解并把注解的内容解析出来

2.如何解析
  • Class、Method、Field、Constructor都实现了AnnotatedElement接口,拥有解析注解的能力

    Annotation[] getDeclaredAnnotations();	//获取当前对象的注解
    T getDeclaredAnnotation(Class<T> annotationClass)	//获取指定的注解对象
    boolean isAnnotationPresent(Class<Annotation> annotationClass)	//判断当前对象是否存在某个注解
    
3.应用

自定义测试注解

public class AnnotationTest {

    @MyTest
    public void test1(){
        System.out.println("Test1");
    }

    @MyTest
    public void test2(){
        System.out.println("Test2");
    }

    //@MyTest
    public void test3(){
        System.out.println("Test3");
    }

    public static void main(String[] args) {
        AnnotationTest annotationTest = new AnnotationTest();
        //测试启动程序
        Class c = AnnotationTest.class;
        Method[] methods = c.getDeclaredMethods();
        for(Method method : methods){
            if(method.isAnnotationPresent(MyTest.class)){
                try {
                    //实例方法需要一个对象来调用
                    method.invoke(annotationTest);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值