JavaWeb1.3.4【基础加强:注解案例-简单的测试框架】

 1 package com.yubaby.annotation.p3;
 2 
 3 /*
 4 * 案例:简单的测试框架
 5 
 6 
 7 * 小结:
 8     1. 以后大多数时候,我们会使用注解,而不是自定义注解
 9     2. 注解给谁用?
10         1. 编译器
11         2. 给解析程序用
12     3. 注解不是程序的一部分,可以理解为注解就是一个标签
13  */
14 public class Calculator {
15 
16     //加法
17     @Check
18     public void add(){
19         String str = null;
20         str.toString();
21         System.out.println("1 + 0 =" + (1 + 0));
22     }
23 
24     //减法
25     @Check
26     public void sub(){
27         System.out.println("1 - 0 =" + (1 - 0));
28     }
29 
30     //乘法
31     @Check
32     public void mul(){
33         System.out.println("1 * 0 =" + (1 * 0));
34     }
35 
36     //除法
37     @Check
38     public void div(){
39         System.out.println("1 / 0 =" + (1 / 0));
40     }
41 
42     public void show(){
43         System.out.println("永无bug...");
44     }
45 }
 1 package com.yubaby.annotation.p3;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 @Retention(RetentionPolicy.RUNTIME)
 9 @Target(ElementType.METHOD)
10 public @interface Check {
11 }
 1 package com.yubaby.annotation.p3;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 import java.lang.reflect.InvocationTargetException;
 7 import java.lang.reflect.Method;
 8 
 9 /**
10  * 简单的测试框架
11  *
12  * main()执行,会自动检测所有带有Check注解的方法,判断这些方法是否有异常,记录异常信息到文件中
13  */
14 public class TestCheck {
15     public static void main(String[] args) throws IOException {
16         //1 创建计算机对象
17         Calculator calculator = new Calculator();
18 
19         //2 获取字节码文件对象
20         Class<? extends Calculator> calculatorClass = calculator.getClass();
21 
22         //3 获取所有方法
23         Method[] methods = calculatorClass.getDeclaredMethods();
24 
25         int count = 0; //记录出现异常的次数
26         BufferedWriter bw = new BufferedWriter(new FileWriter("day01\\src\\bug.txt"));
27 
28         for (Method method: methods){
29             //4 判断方法上是否有Chech注解
30             if (method.isAnnotationPresent(Check.class)){
31                 //method.isAnnotationPresent(Check.class)判断method是否被Check注解
32                 //5 有Chech注解的方法-->执行检测
33                 try {
34                     method.invoke(calculator);
35                 } catch (Exception e) {
36                     //6 try捕获异常,在catch中处理异常信息
37                     //记录异常信息到文件中
38                     count++;
39                     bw.write(method.getName() + "方法出现异常");
40                     bw.newLine();
41                     bw.write("异常名称:" + e.getCause().getClass().getSimpleName());
42                     bw.newLine();
43                     bw.write("异常原因:" + e.getCause().getMessage());
44                     bw.newLine();
45                     bw.write("--------------------------------");
46                     bw.newLine();
47                 }
48             }
49         }
50 
51         bw.write("本次一共出现" + count + "次异常");
52         bw.flush();
53         bw.close();
54 
55     }
56 }
add方法出现异常
异常名称:NullPointerException
异常原因:null
--------------------------------
div方法出现异常
异常名称:ArithmeticException
异常原因:/ by zero
--------------------------------
本次一共出现2次异常

  

posted @ 2021-06-22 22:52  yub4by  阅读(50)  评论(0编辑  收藏  举报