zoukankan      html  css  js  c++  java
  • 自定义注解

    那么什么是注解呢?

    注解的定义:

    其实就是一个特性的组件一个类型元数据的绑定 该元数据 的添加只不过是给编译器识别的 当编译器将.java编译成 .class的时候 类型元数据跟着原有的数据信息一起被持久化 等到jvm 通过classLoader将.class装载到64mb的jvm 的特定区域时 我们可以 通过反射机制 去获取到有特定标记(类型元数据)的组件上的数据信息 (这个时候的数据信息 可以看成是经过jvm进行加工的程序员可以识别的数据信息)数据获取到内存变量后 可以为后续的(数据)程序做铺垫。

    注解: 标记注解 一般注解 标准元注解

     注解都是什么呢?看下面这张图就明白了!

      上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解

    @Override用于标识,该方法是继承自超类的。这样,当超类的方法修改后,实现类就可以直接看到了。

      而@Deprecated注解,则是标识当前方法或者类已经不推荐使用,如果用户还是要使用,会生成编译的警告。

      上面的测试,也仅仅是针对IDE,如果是利用javac,应该会有提示的。

      其他的不多说了,标准元注解 都是干嘛的呢?

      @Documented 标记生成javadoc

      @Inherited 标记继承关系

      @Retention 注解的生存期

      @Target 标注的目标

      

    下面我们自己做一个注解!

      首先声明一个接口,并未它添加注解内容!

    复制代码
     1 package testAnnotation;
     2 
     3 import java.lang.annotation.Documented;
     4 import java.lang.annotation.Retention;
     5 import java.lang.annotation.RetentionPolicy;
     6 
     7 @Documented
     8 @Retention(RetentionPolicy.RUNTIME)
     9 public @interface Person{
    10     String name();
    11     int age();
    12 }
    复制代码

      一般来说,注解都是搭配反射的解析器共同工作的。然后利用反射机制查看类的注解内容

    复制代码
     1 package testAnnotation;
     2 
     3 @Person(name="xingoo",age=25)
     4 public class test3 {
     5     public static void print(Class c){
     6         System.out.println(c.getName());
     7         
     8         //java.lang.Class的getAnnotation方法,如果有注解,则返回注解。否则返回null
     9         Person person = (Person)c.getAnnotation(Person.class);
    10         
    11         if(person != null){
    12             System.out.println("name:"+person.name()+" age:"+person.age());
    13         }else{
    14             System.out.println("person unknown!");
    15         }
    16     }
    17     public static void main(String[] args){
    18         test3.print(test3.class);
    19     }
    20 }
    复制代码

      运行结果,读取到了注解的内容

    testAnnotation.test3
    name:xingoo age:25
  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/SFHa/p/10270223.html
Copyright © 2011-2022 走看看