小言_互联网的博客

注解案例--简单的测试框架

468人阅读  评论(0)

目录

 

一、自定义注解

1.自定义注解源代码

2.元注解

二、定义实用类

1.实用类源代码

三、解析注解

1.解析步骤

2.解析注解源代码

3.测试结果:

四、注解小结


 

一、自定义注解

1.自定义注解源代码


  
  1. package cn.test;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. @Retention(RetentionPolicy.RUNTIME)
  7. @Target({ElementType.METHOD})
  8. public @interface Check {
  9. }

2.元注解

自定义注解@Check

在自定义中用到了

@Retention(RetentionPolicy.RUNTIME)  该注解是表示用到该注解的注解的作用阶段    
样例注解是:   是保存到字节码文件且被JVM读取到。
@Target({ElementType.METHOD})      该注解是表示用到该注解的注解的作用类型
样例注解是:    是表面该注解的注解是作用在方法上的。

二、定义实用类

1.实用类源代码


  
  1. package cn;
  2. import cn.test.Check;
  3. public class Calculator {
  4. @Check
  5. public void add ()
  6. {
  7. System.out.println( "1+0="+( 1+ 0));
  8. }
  9. @Check
  10. public void sub ()
  11. {
  12. System.out.println( "1-0="+( 1- 0));
  13. }
  14. @Check
  15. public void mul (){
  16. System.out.println( "1*0="+( 0* 1));
  17. }
  18. @Check
  19. public void div ()
  20. {
  21. System.out.println( "1/0="+( 1/ 0));
  22. }
  23. public void show ()
  24. {
  25. System.out.println( "无bug.........");
  26. }
  27. }

给加减乘除四个方法加上了@Check注解(进行编译检查)

三、解析注解

1.解析步骤

        (1)

        创建对象
Calculator c=new Calculator();

        (2)

        获取字节码文件对象
Class<? extends Calculator> aClass = c.getClass();

        (3)

        获取所有方法
Method[] methods = aClass.getMethods();

        (4)

                判断方法上是否有Check注解

                要判断  肯定要遍历

                        定义变量  --出现次数

                        定义IO流   把异常写入文档

2.解析注解源代码


  
  1. package cn.test;
  2. import cn.Calculator;
  3. import java.io.BufferedWriter;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.lang.reflect.Method;
  7. /*
  8. *简单的测试框架
  9. * 解析注解
  10. * 当主方法执行后 会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否异常
  11. *
  12. */
  13. public class TestCheck {
  14. public static void main (String[] args) throws IOException {
  15. //1.创建对象
  16. Calculator c= new Calculator();
  17. //2.获取字节码文件对象
  18. Class<? extends Calculator> aClass = c.getClass();
  19. //3.获取所有方法
  20. Method[] methods = aClass.getMethods();
  21. //4.判断方法上是否有Check注解
  22. //要判断 肯定要遍历
  23. int number= 0; //出现异常的次数
  24. BufferedWriter bw= new BufferedWriter( new FileWriter( "bug.txt"));
  25. for (Method method:methods)
  26. {
  27. //isAnnotationPresent 方法 判断当前方法 method 对象 有没有指定的注解被加上了 被作用了
  28. if (method.isAnnotationPresent(Check.class))
  29. {
  30. //5.有,执行
  31. // 6.捕获异常
  32. try {
  33. method.invoke(c);
  34. } catch(Exception e){
  35. number++;
  36. bw.write(method.getName()+ "方法异常");
  37. bw.newLine();
  38. bw.write( "异常名称:"+e.getCause().getClass().getSimpleName());
  39. bw.newLine();
  40. bw.write( "异常原因:"+e.getCause().getMessage());
  41. bw.newLine();
  42. }
  43. }
  44. }
  45. bw.write( "本次一个出现"+number+ "次异常");
  46. bw.flush();
  47. bw.close();
  48. }
  49. }

3.测试结果:

 

四、注解小结

1.以后大多数时候,我们会使用注解,而不是自定义注解

2.注解给谁看:

(1)编译器

(2)给解析程序使用

3.注解不是程序的一部分,可以理解为注解就是一个标签

 

 

 


转载:https://blog.csdn.net/m0_61469860/article/details/125691124
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场