首页 / JAVA / Java 之 注解的使用与读取
Java 之 注解的使用与读取
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 之 注解的使用与读取,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3606字,纯文字阅读大概需要6分钟。
内容图文
一、程序使用(解析)注解
需求:不能改变类的任何代码,但是可以创建任意类的对象,可以执行任意类的任意方法。
自定义注解:
1
import
java.lang.annotation.ElementType;
2
import
java.lang.annotation.Retention;
3
import
java.lang.annotation.RetentionPolicy;
4
import
java.lang.annotation.Target;
5
6
/**
7
* 描述需要执行的类名和方法名
8
*/
9
@Target({ElementType.TYPE})
10
@Retention(RetentionPolicy.RUNTIME)
11
public @interface Pro {
1213 String className();
14 String methodName();
15 }
创建任意的类:
1
public
class
Demo1 {
2
public
void
show() {
3 System.out.println("hello world");
4 }
5 }
创建任意类对象的测试类:
1
import
java.io.InputStream;
2
import
java.lang.reflect.Method;
3
import
java.util.Properties;
4
5 @Pro(className = "cn.ks.annotation.Demo1",methodName = "show") //给类添加注解,并给属性赋值 6publicclass ReflectTest {
7publicstaticvoid main(String[] args) throws Exception {
8/* 9 前提:不能改变该类的任何代码。可以创建任意类的对象,可以执行任意方法
10*/1112//1、解析注解
13//1.1 获取该类的字节码文件14 Class<ReflectTest2> re = ReflectTest2.class;
15//2 获取上面注解对象
16// 其实就是在内存中生成了一个该注解接口的子类实现对象17 Pro an = re.getAnnotation(Pro.class);
1819/*20 public class ProImpl implements Pro {
21 public String className() {
22 return
23 }
2425 public String methodName() {
26 return
27 }
28 }
29*/3031//3 调用注解对象定义的抽象方法,获取返回值32 String className = an.className();
33 String methodName = an.methodName();
34 System.out.println(className);
35 System.out.println(methodName);
3637//4.加载该类进内存38 Class cls = Class.forName(className);
39//5.创建对象40 Object obj = cls.newInstance();
41//6.获取方法对象42 Method method = cls.getMethod(methodName);
43//7.执行方法44 method.invoke(obj);
45 }
46 }
二、案例
需求:给一个 Calculator 类,测试类中的方法是否都正常。
自定义一个注解:
1
import
java.lang.annotation.ElementType;
2
import
java.lang.annotation.Retention;
3
import
java.lang.annotation.RetentionPolicy;
4
import
java.lang.annotation.Target;
5
6
@Retention(RetentionPolicy.RUNTIME)
7
@Target(ElementType.METHOD)
8
public @interface Check {
9 }
给 Calculator 类中的每一个方法添加 @Check 注解
1
public
class
Calculator {
2
3
//
加法
4
@Check
5
public
void
add(){
6 String str = null;
7 str.toString();
8 System.out.println("1 + 0 =" + (1 + 0));
9 }
10//减法11 @Check
12publicvoid sub(){
13 System.out.println("1 - 0 =" + (1 - 0));
14 }
15//乘法16 @Check
17publicvoid mul(){
18 System.out.println("1 * 0 =" + (1 * 0));
19 }
20//除法21 @Check
22publicvoid div(){
23 System.out.println("1 / 0 =" + (1 / 0));
24 }
252627publicvoid show(){
28 System.out.println("永无bug...");
29 }
3031 }
测试类:
1
import
java.io.BufferedWriter;
2
import
java.io.FileWriter;
3
import
java.io.IOException;
4
import
java.lang.reflect.Method;
5
6
/**
7
*
8
* 当主方法执行后,会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否有异常,记录到文件中
9
*/
10
public
class
TestCheck {
11
12
13
public
static
void main(String[] args) throws IOException {
14//1.创建计算器对象15 Calculator c = new Calculator();
16//2.获取字节码文件对象17 Class cls = c.getClass();
18//3.获取所有方法19 Method[] methods = cls.getMethods();
2021int number = 0;//出现异常的次数22 BufferedWriter bw = new BufferedWriter(new FileWriter("bug.txt"));
232425for (Method method : methods) {
26//4.判断方法上是否有Check注解27if(method.isAnnotationPresent(Check.class)){
28//5.有,执行29try {
30 method.invoke(c);
31 } catch (Exception e) {
32//6.捕获异常
3334//记录到文件中35 number ++;
3637 bw.write(method.getName()+ " 方法出异常了");
38 bw.newLine();
39 bw.write("异常的名称:" + e.getCause().getClass().getSimpleName());
40 bw.newLine();
41 bw.write("异常的原因:"+e.getCause().getMessage());
42 bw.newLine();
43 bw.write("--------------------------");
44 bw.newLine();
4546 }
47 }
48 }
4950 bw.write("本次测试一共出现 "+number+" 次异常");
5152 bw.flush();
53 bw.close();
54555657 }
5859 }
注意:在读取注解的时候,需要用到反射的知识,可以先学习反射,然后再返回来看这段代码。
原文:https://www.cnblogs.com/niujifei/p/12307492.html
内容总结
以上是互联网集市为您收集整理的Java 之 注解的使用与读取全部内容,希望文章能够帮你解决Java 之 注解的使用与读取所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。