Annotation注解的应用(打印异常信息)

Annotation注解的应用(打印异常信息):

1.创建一个检索注解(CheckException):

 1 package demo4;
 2 
 3 import java.lang.annotation.*;
 4 
 5 //?什么是元注解? 注解的父类 注解的注解 元注解
 6 
 7 /**
 8  * 在IDEA/eclipse中,当你按下Ctrl+s 相当于执行了javac  CheckException.java
 9  */
10 @Target(ElementType.METHOD)//该注解可以作用在方法上
11 @Retention(RetentionPolicy.RUNTIME)// (源码)  .class  运行时
12 @Documented //文档注解
13 public @interface CheckException {
14 }

2.创建一个计算机类(Calculator):

 1 package demo4;
 2 
 3 /**
 4  * 计算器类
 5  */
 6 
 7 public class Calculator {
 8     /**
 9      * 写代码,先写好伪代码[逻辑思维],然后翻译成java编程语句
10      */
11     //加 add +
12     @CheckException
13     public void add(){
14         System.out.println("1+0="+(1+0));
15     }
16     //减 sub -
17     @CheckException
18     public void sub(){
19         System.out.println("1-0="+(1-0));
20     }
21     //乘 mul *
22     @CheckException
23     public void mul(){
24         System.out.println("1*0="+(1*0));
25     }
26     //除 div /
27     @CheckException
28     public void div(){
29         System.out.println("1/0="+(1/0));
30     }
31 32 }

3.写一个TestCheckException (用于打印异常信息):

 1 package demo4;
 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  * 1.整理思路
11  *     1.测试@CheckExcetion注解是否生效 测试已生效
12  *     2.若包含@CheckException注解,则该方法执行
13  *     3.若执行有异常,则记录异常信息在bug.txt文档中
14  * 2.写伪代码(写注释)
15  *      1)main   选main
16  *      2)测试方法 @Test
17  * 3.翻译成java代码
18  *
19  */
20 public class TestCheckException {
21     public static void main(String[] args) {
22         //2.若包含@CheckException注解,则该方法执行-->反射技术
23         Caculator caculator=new Calculator();
24         //请问获取Class类对象的几种方式: forName .class .getClass .getSystemClassLoader.getLClass()
25        Class caculatorClazz=null;
26         int num=0;
27         //定义我的文件输出流
28         BufferedWriter bufferedWriter=null;
29         try {
30             caculatorClazz=   ClassLoader.getSystemClassLoader().loadClass("demo4.Calculator");
31             //获取方法
32             Method[] methods=caculatorClazz.getMethods();
33             //若包含@CheckException注解
34             //增强for循环
35             //定义错误数量
36 
37             try {
38                  bufferedWriter = new BufferedWriter(new FileWriter("checkException.txt"));
39 
40             } catch (IOException e) {
41                 e.printStackTrace();
42             }
43             for (Method method:methods) {
44                 //判断该方法.是否预处理注解,注解类型为:CheckException.class
45                 if (method.isAnnotationPresent(CheckException.class)){
46                     //若包含该注解,则调用(执行)该方法
47                     try {
48                         method.invoke(caculator);
49                     } catch (Exception e) {
50                         num++;
51                         /**
52                          * method方法有异常:div ==>记录异常信息所在的方法 bug.txt
53                          * 异常类型:java.lang.ArithmeticException==>打印异常类型
54                          * 异常信息:/ by zero                    ==>导致异常的原因
55                          * ------------------------            ==>分割符
56                          * 共计异常数量:1                        ==>统计异常数量
57                          */
58                         try {
59                             bufferedWriter.write("****************");
60                             bufferedWriter.newLine();
61                             bufferedWriter.write("异常所在的方法:"+method.getName());
62                             bufferedWriter.newLine();
63                             bufferedWriter.write("异常名称:"+e.getCause().getClass().getName());
64                             bufferedWriter.newLine();
65                             bufferedWriter.write("异常原因:"+e.getCause().getMessage());
66                             bufferedWriter.newLine();
67                             System.out.println("程序消息打印成功!");
68 
69 
70                         } catch (IOException e1) {
71                             e1.printStackTrace();
72                         }
73                     }
74                 }
75             }
76         } catch (ClassNotFoundException e) {
77             e.printStackTrace();
78         }
79         try {
80             bufferedWriter.write("***************");
81             bufferedWriter.newLine();
82             bufferedWriter.write("异常总数:"+num);
83             bufferedWriter.flush();
84             bufferedWriter.close();
85         } catch (IOException e) {
86             e.printStackTrace();
87         }
88 
89     }
90 }

运行效果图:

心得总结:

  贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。

demo4
原文地址:https://www.cnblogs.com/javacyq/p/13610635.html