zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Auth模块使用方法大全
    正则模块
    Django实现Rbac权限管理
    Django models中关于blank与null的补充说明
    Laravel日常使用总结
    关闭IIS开启自启
    phpstorm常用快捷键
    将程序sublime添加到右键菜单中
    form表单利用iframe高仿ajax
    PHP生成二维码,PHPQRCode
  • 原文地址:https://www.cnblogs.com/javacyq/p/13610635.html
Copyright © 2011-2022 走看看