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