java annotation

作者:原创时间:2022-03-23
文档

java annotation是什么,让我们一起了解一下?

annotation是Java增加对元数据的支持,注解(annotation)与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。

Java注解(Annotation)原理是什么?

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。

通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值,而memberValues的来源是Java常量池。

实际上Java注解与普通修饰符(public、static、void等)的使用方式并没有多大区别,下面的例子是常见的注解:

  1. public class AnnotationDemo {
       
       @Test
       public static void A(){
           System.out.println("Test.....");
       }
       @Deprecated
       @SuppressWarnings("uncheck")
       public static void B(){
       }
    }

通过在方法上使用@Test注解后,在运行该方法时,测试框架会自动识别该方法并单独调用,@Test实际上是一种标记注解,起标记作用,运行时告诉测试框架该方法为测试方法。

而对于@Deprecated和@SuppressWarnings(“uncheck”),则是Java本身内置的注解,在代码中,可以经常看见它们,但这并不是一件好事,毕竟当方法或是类上面有@Deprecated注解时,说明该方法或是类都已经过期不建议再用,@SuppressWarnings 则表示忽略指定警告,比如@SuppressWarnings(“uncheck”),这就是注解的最简单的使用方式。

实战操作:

首先写一个简单的自定义注解小程序,先自定义一个运行时注解。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface HelloAnnotation {

    String say() default "Hi";

}

然后在Main函数中解析注解。

@HelloAnnotation(say = "Do it!")
public class TestMain {
    public static void main(String[] args) {
        HelloAnnotation annotation = TestMain.class.getAnnotation(HelloAnnotation.class);//获取TestMain类上的注解对象
        System.out.println(annotation.say());//调用注解对象的say方法,并打印到控制台
    }
}

运行程序,输出结果如下:

Do it!

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java ant java apns 苹果13蓝牙搜索不到设备怎么办 java append java application java apriori java archive java arcsin java arccos java arctan java args java arrays.sort java ascii java asmx java aspectj java aspose java assembly java async win10专业版和企业版的区别 java bacnet java android iphone呼叫失败是什么原因 java algorithm ipad2是哪年的 java akka java aggregation java aes加密 java advice java addall java add java actuator 西北五省是哪五省 java activity java activiti 瓮安县属于哪个市 java active 茉莉花茶是绿茶吗 java a++和++a的区别 熊猫只有中国才有的吗 idea新建一个java项目