1.什么是注解
注解是一种注释,可用于标志类,方法,属性等地方。可以通过反射机制判断类中某个地方是否有对应注解然后做进一步操作。注解可以有属性,可以通过反射机制拿到注解的属性的值。
注解经过编译后同样会生成xxx.class文件
2.如何创建注解
与创建接口类似,用@interface
[修饰符列表] @interface 注解名{
}
3.@Override与@Deprecated注解
@Override注解只能用于方法上,表示方法重写父类方法。
@Deprecated注解表示方法已过时,谨慎使用。
4.注解中定义属性
属性类型 属性名() [default xxx (可选)];
5.使用注解
在注解允许作用的地方加上注解即可。若注解有属性,必须将没有默认值的属性全部设置。如@Abc(value=1,name="zhangsan")。若注解只有一个属性且属性名为value可以省略value赋值,@Abc(1)
6.元注解
元注解是注解上的注解。常用的元注解有@Target @Retention
@Target
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { /** * Returns an array of the kinds of elements an annotation type * can be applied to. * @return an array of the kinds of elements an annotation type * can be applied to */ ElementType[] value(); }public enum ElementType { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE, MODULE, RECORD_COMPONENT; }Target表示在什么地方使用。@Target注解有一个类型为ElementType[]数组的属性value,ElementType是枚举类型。r如@Target(ElementType.TYPE) 表示只能用在类上
@Target({ElementType.TYPE,ElementType.FIELD})表示只能用在类或属性上
@Retention
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { /** * Returns the retention policy. * @return the retention policy */ RetentionPolicy value(); }public enum RetentionPolicy { //注解只保留在java源文件中 SOURCE, //注解保留在class文件中 CLASS, //注解保留在class文件中,运行时保留在jvm中,可以被反射机制读取 RUNTIME }Retention表示注解保留的策略。该有一个属性value类型为RetentionPolicy。RetentionPolicy为枚举类。
RetentionPolicy.SOURCE 注解只保留在java源文件中
RetentionPolicy.CLASS 注解保留在class文件中
RetentionPolicy.RUNTIME 注解保留在class文件中,运行时保留在jvm中,可以被反射机制读取
7.通过反射机制获取注解中属性的值
package com.zhaojisu;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
int aa();
}
package com.zhaojisu;
@MyAnnotation(value = "zhaojisu",aa=18)
public class entity {
}
public static void main(String[] args) throws ClassNotFoundException {
Class<?> aClass = Class.forName("com.zhaojisu.entity");
boolean flag= aClass.isAnnotationPresent(MyAnnotation.class);
if (flag){
MyAnnotation annotation = aClass.getAnnotation(MyAnnotation.class);
System.out.println(annotation.value());
System.out.println(annotation.aa());
}
}
8.注解的作用
注解可以是标签,可以是限制,可以是说明等等。注解有时候像是一人的标签。看到这个标签就能知道他是干什么用的。通过反射可以实现对加上某个注解的类进行限制,可以获取注解中的属性值等等功能。
本文详细介绍了Java注解的概念、创建方式、@Override与@Deprecated的使用,以及注解的属性定义。同时,讲解了元注解@Target和@Retention的作用,并通过实例展示了如何通过反射获取注解属性的值。最后,阐述了注解在代码中的重要作用,包括作为标签、限制和说明等功能。
27万+

被折叠的 条评论
为什么被折叠?



