JavaSE之注解
创始人
2024-01-28 21:43:58
0

目录

  • 注解的属性类型
  • 元注解
    • 注解解析
  • 模拟junit
  • 最后

注解的属性类型

注解只能存放简单的数据
如:

基本数据类型
String
Class
注解
枚举
以上类型的一维数组

格式:

public @interface 注解名称 {

public 属性类型 属性名();
}

public @interface MyAn1 {public String name();//String类型int age();//基本数据类型Class aaa();//Class类型Enum1 bbb();//枚举类型//注解类型MyAn2 ddd();//以上类型的一维数组//不能用自定义类型String[] ccc();String value();//名字为value时,在用注解时可以省略
}
public @interface MyAn2 {//空注解
}
public @interface MyAn3 {String name();int age();
}
@MyAn3(name = "李四",age = 99)
public class Demo {public static void main(String[] args) {}}

元注解

什么是元注解?

修饰注解的注解

元注解@Target

正常情况注解可以放在类的任何一个元素上面

作用:

用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。

可使用的值定义在ElementType枚举类中,常用值如下
TYPE,类,接口

FIELD, 成员变量

METHOD, 成员方法

PARAMETER, 方法参数

CONSTRUCTOR, 构造方法

LOCAL_VARIABLE, 局部变量

元注解@Retention

作用
用来标识注解的生命周期(有效范围)

可使用的值定义在RetentionPolicy枚举类中,常用值如下

默认是CLASS

SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在

CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值

RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段

注解解析

注解解析就是得到注解中的数据

AnnotatedElement接口

Annotation[] getAnnotations() 获取所有注解

< Annotation > T getAnnotation(Class< T > annotationClass) 获取一个指定的注解

boolean isAnnotationPresent(Class< Annotation > annotationClass) 判断是否有指定的注解

如何解析注解?

通过反射来解析注解,原则注解在谁头上就用谁来解析

如果注解在构造方法上,使用Constructor来获取

如果注解在成员方法上,使用Method来获取

如果注解在成员变量上,使用Field来获取

定义这样一个注解,必须是RUNTIME时期,因为getAnnotations只能拿到RUNTIME时期的注解

@Retention(RetentionPolicy.RUNTIME)
public @interface StudentAnno {String name();int age();String[] parent();
}

将注解用于此类方法

public class Student {@StudentAnno(name = "elephant",age = 11,parent = {"dog", "cat"})public void study(){System.out.println("认真学习");}
}

解析注解

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {Class cls = Student.class;Method study = cls.getMethod("study");boolean b = study.isAnnotationPresent(StudentAnno.class);if (b) {StudentAnno annotation = study.getAnnotation(StudentAnno.class);System.out.println("我的名字是" + annotation.name() + "\r\n" + "今年" + annotation.age() + "岁\r\n" + "父母是" + Arrays.toString(annotation.parent()));}}

在这里插入图片描述

模拟junit

首先创建一个注解

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}

接着在方法上添加注解

public class Teacher {/*所以junit里面的方法是public 无返回值 ,无参数方便反射*/public void study(){System.out.println("学习");}@MyTestpublic void eat(){System.out.println("吃饭");}@MyTestpublic void sleep(){System.out.println("睡觉");}
}

最后解析注解,如果有此注解则运行方法

public static void main(String[] args) throws Exception {Class cls = Teacher.class;Method[] methods = cls.getMethods();Teacher teacher = cls.getConstructor().newInstance();for(Method m : methods){boolean b = m.isAnnotationPresent(MyTest.class);if(b){m.invoke(teacher);}}}

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

相关内容

热门资讯

最新适合农村发展的小本生意 前... 农村创业项目:屠宰冷冻从目前的农村发展情况来看,养猪的农户比较多,而针对这个行业,猪肉市场价格并不是...
农村创业项目大全 这些项目带你... 手机工厂DIY礼物是用户介入产品的生产过程,将指定的图案和文字印刷到指定的产品上,用户获得自己定制的...
2012做什么小本生意好 – ... 2013做什么小本生意好?夜市摆地摊创业小本好!现如今做生意小本创业者越来越多的人更钟爱地摊生意,2...
适合大学生创业小本项目 仅供参... 适合大学生创业小本项目,更多投资收益的好项目。创业有风险,而大学生想创业却没有本钱?小本创业有什么?...
广东火爆大学生创业项目小项广东... 聊城市西高网络科技有限公司为您详细解读广东火爆大学生创业项目小项目,摆地摊的相关知识与详情:D、滑动...
佛山市有什么好创业的小本经营的... 佛山市有什么好创业的小本经营的项目?在佛山创业可以选择一些投资费用比较少的项目,最好是人们刚需的用量...
当下有哪些不起眼的小本创业项目... 2021-01-赚钱方法26℃0创业已经不再是什么稀奇事,有些人工作者工作着被老板批评了一下,就跑出...
义乌小本创业项目 义乌小本创业...   :绿色干洗店经绿色工艺配方后的洗涤剂的化学含量比普通洗衣粉还低,对衣物无任何损伤,对人体也无害,...
适合农村小本创业项目 适合农村... 农村创业成本低,国家对农村创业也特别支持。那么,在农村有哪些好的低成本创业项目?下面小编给大家带来,...
小本创业项目小本小吃创业好项目... 几个适合小本小吃创业好项目对于当今社会的发展,越来越多人选择了自主创业,创业是另外一个实现自己的价值...