注解的理解和类型
java注解-最通俗易懂的讲解
廖雪峰java注解
对注解(Annotation)最直接的理解是,注解本身就相当于一个附加信息,这个附加信息并不会对原有的类,方法等进行处理,进行处理的应该是对附加信息进行处理的方法,这些方法根据附加信息进行进一步处理
注解可分为三类:
- 由编译器使用的注解:(编译时使用,编译后扔掉)
- @Override:让编译器检查该方法是否正确地实现了覆写;
- @SuppressWarnings:告诉编译器忽略此处代码产生的警告。
- 工具处理.class文件使用的注解,这些工具加载class对class做动态修改,实现特殊功能,但加载结束不会存在于内存。一般不用我们自己处理
- 程序运行期间能够读取的注解,加载后一直存在于JVM中。这一类注解是由自己编写的java代码进行处理,而不是JVM自动识别处理
元注解
- Retention: 表示注解的存活时间
- RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
- RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
- RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
- Documented:够将注解中的元素包含到 Javadoc 中去。
- Target: 定义注解应用在源码的位置
- 类或接口:ElementType.TYPE;
- 字段:ElementType.FIELD;
- 方法:ElementType.METHOD;
- 构造方法:ElementType.CONSTRUCTOR;
- 方法参数:ElementType.PARAMETER。
- Inherited:如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
注解的定义
使用@interface
定义注解
@Target(ElementType.TYPE)
@Rentation(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
int id() default -1;
String msg() default "hi";
}
注解只有成员变量,没有方法,成员变量的定义是无形参方法来声明。使用default
指定默认值(推荐)
赋值方法&使用方法
@TestAnnotation(id=3, msg="hello annotation")
public class Test {
}
//使用默认值
@TestAnnotation()
public class Test {
}
其他:文章来源:https://www.toymoban.com/news/detail-702306.html
- 还有一种情况。如果一个注解内仅仅只有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内
- 一个注解没有任何属性,那么在应用这个注解的时候,括号都可以省略。
注解的处理
//判断是否应用某个注解(注解为annotationClass)
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}
//获取 Annotation 对象:返回指定类型注解
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}
//获取Annotation对象:返回注解到这个元素上的所有注解
public Annotation[] getAnnotations() {}
处理案例代码文章来源地址https://www.toymoban.com/news/detail-702306.html
@TestAnnotation()
public class Test {
public static void main(String[] args) {
boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
if ( hasAnnotation ) {
TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
System.out.println("id:"+testAnnotation.id());
System.out.println("msg:"+testAnnotation.msg());
}
}
}
到了这里,关于Java基础:注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!