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 }
复制代码
1
2
3
4
5
6
7
8
9
add方法出现异常
异常名称:NullPointerException
异常原因:null
--------------------------------
div方法出现异常
异常名称:ArithmeticException
异常原因:/ by zero
--------------------------------
本次一共出现2次异常

  

posted @   yub4by  阅读(52)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示