一、基础知识
1、注解是jdk1.5版本提供的一个特征:@Deprecated:标识使用方法已经被放弃,但是还可以使用 @SuppressWarnings(“all”) //@SunppressWarnings(“uncheck”) 取消警告操作
2、元注解:不能包含其他注解的注解(元数据) @Documented 生成 JavaDoc文档的时候会生成在文件中 @Retetion 代表该注解的作用域:SOURCE:代表源码中有效 CLASS:字节码文件中有效。RUNTIME:JVM上面运行时都有效 @Target:指定注解能够出现的位置 TYPE:标注在类上面 METHOD:标注在方法上面 PARAMETER:标在参数上面 FIELD:标注在字段上面 @Interned:注解可以继承。
二、代码
1、新建一个注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 注解@Inteface标识
* 指定作用域和位置
*/
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE})
public @interface MyAnnotation {
}
2、写一个类来用上面的注解@MyAnnotation,这时拿的值为空,因为SOURCE在源码中有效,在运行时没有效
3、作用域标为Class类型的时候还是null
运行下Myclass的类:因为SOURCE的作用域在字节码文件上
因为类运行的时候是加载到java虚拟机上的,所以一般自定义的注解都是Runtime,因为在运行期间拿它的注解的对象
运行结果
注解里面可以定义方法的比如:定义一个value方法的声明,这个方法的声明在MyAnnotation里面称之为属性也是没问题的,好比接口一样
但是一般定义一个空的字符串就可以了
如果是在注解里面就一个Value属性的话,在Myclass类里面上MyAnnotation注解上的属性Value不用写
如何拿这个类上面的注解所对应方法的值呢?代码如下:
如果不强转的话,用泛型也是Ok的。
上面的注解就是标在类上,注解也可以标注在字段上
然后运行下MyClass类
注解也可以标注在方法上和参数上代码如下
获取参数值的代码如下:二维数组里面的每一个下表存的是一维数组,一维数组里面存的是注解的对对象
欢迎各位小伙伴来咨询,想要工程源码的加群:797853299