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次异常