Java基础--带你理解什么是注解
注解与注释的区别:
-
简单来说,注释是给人看的不会被编译器执行,注解是用来修饰代码的,会被编译器执行。
*四大元注解:
元注解其实就是用来修饰注解的。 元注解其实就是用来修饰注解的。
-
@ Retention: 定义注解的生命周期,注解将会在什么时候从源码中消失。 RetentionPolicy.SOURCE:注解仅存在于源码中,编译时就会消失 RetentionPolicy.CLASS: 默认的保留策略,注解会在class字节码文件中存在,但运行时会消失。 RetentionPolicy.RUNTIME: 注解会在class字节码文件中存在,在运行时可以通过反射获取到 @ Target:定义注解的修饰目标,就是说当前注解可以用来修饰哪些对象。 TYPE :接口、类、枚举、注解 FIELD:字段、枚举的常量 METHOD :方法 PARAMETER:方法参数 CONSTRUCTOR:构造函数 LOCAL_VARIABLE:局部变量 ANNOTATION_TYPE:注解 PACKAGE:包 @ Document:说明该注解将被包含在javadoc中 @ Inherited:说明子类可以继承父类中的该注解
实现自定义注解:
1、首先实现一个注解类
注解有一个name属性,target注解指明当前注解只能修饰属性
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Target(value = { ElementType.FIELD }) public @interface MyAnnotation { public String name(); }
2、使用这个注解
import java.lang.reflect.Field; public class AnnoTest { @MyAnnotation(name = "wang") static String name; int i; /** * 利用反射技术,拿到注解的内容 */ public static void main(String[] args) throws ClassNotFoundException { // 根据全路径名拿到类实例 Class cls = Class.forName("MyAnnotation.AnnoTest"); // 拿到所有实例的属性 Field[] fs = cls.getDeclaredFields(); // 遍历所有属性 for (Field f : fs) { // 如果当前属性含有MyAnnotation注解 if (f.isAnnotationPresent(MyAnnotation.class)) { // 拿到注解对象 MyAnnotation a = f.getAnnotation(MyAnnotation.class); // 拿到注解的属性 name = a.name(); } } System.out.println(name); } }
总结:先自定义注解类,在类中声明需要的属性。然后在需要的地方使用注解。然后利用反射技术拿到注解的内容。
上一篇:
IDEA上Java项目控制台中文乱码