一、注解
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、
接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素
进行说明,注释。
- @Target
- @Retention
自定义注解作用:
可以指定含有注解的方法执行,可以指定参数。
1、元注解之@Target
作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。
可选的参数值在枚举类ElemenetType中包括:
- TYPE: 用在类,接口上
- FIELD:用在成员变量上
- METHOD: 用在方法上
- PARAMETER:用在参数上
- CONSTRUCTOR:用在构造方法上
- LOCAL_VARIABLE:用在局部变量上
2、元注解之@Retention
作用:定义该注解的生命周期(有效范围)。
可选的参数值在枚举类型RetentionPolicy中包括
- SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
- CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
- RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取注解。
二、注解的属性
1、属性的作用
可以让用户在使用注解时传递参数,让注解的功能更加强大。
2、属性的格式
格式1:数据类型 属性名();
格式2:数据类型 属性名() default 默认值;
元注解 public @interface 注解名称{ 属性列表; }
3、定义案例
public @interface Student { // 姓名 String name(); // 年龄 int age() default 18; // 性别 String gender() default "男"; }// 该注解就有了三个属性:name,age,gender
4、属性适用的数据类型
八种基本数据类型(int,flfloat,boolean,byte,double,char,long,short)
String类型,Class类型,枚举类型,注解类型
以上所有类型的一维数组
三、完整代码
注解MyAnnotation
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { // 多位作者 String[] authors(); // 书名 String value()default "暮光之城"; // 价格 double price() default 100; }
具体使用类TestAnnotation
public class TestAnnotation { //有注解的被调用执行,并获取注解中的值 @MyAnnotation(authors = "张三") public void test01() { System.out.println("Test MyAnnotation"); } //没有注解的不执行 public void test02() { System.out.println("I am Test02"); } }
测试类Test
import java.lang.reflect.Method; public class Test { public static void main(String[] args) throws Exception { //执行方法 TestAnnotation obj = new TestAnnotation(); run(obj); } //执行含有注解的方法 public static void run(Object obj) throws Exception { //利用反射获取成员方法 Method[] methods = obj.getClass().getMethods(); for (Method m : methods) { //从方法中获取含有指定注解 MyAnnotation my = m.getDeclaredAnnotation(MyAnnotation.class); if (my != null) { //获取注解的参数 System.out.println("书名为:" + my.value()); System.out.println("作者为:" + (my.authors())[0]); System.out.println("价格为:" + my.price()); //执行含有注解的方法 m.invoke(obj); } } } }
四、下载地址
https://download.csdn.net/download/weixin_44624117/12897925