注解案例

案例:
有一个模拟计算器程序,其中有五个方法需要测试时又有异常,需要我们进行测试,通过注解编写一个用来测试异常的简单框架,要求可以自动执行所有标有相应注解的方法并检查出异常,并将异常信息打印在日志文件中

模拟计算器代码

package annotiation;

public class jisuanqi {
    @check
    public void add(){
        String s=null;
        s.toString();//有空指针异常
        System.out.println("1+1="+(1+1));
    }
    @check
    public void sub(){
        System.out.println("1-0="+(1-0));
    }
    @check
    public void cheng(){
        System.out.println("1*0="+(1*0));
    }
    @check
    public void chu(){
        System.out.println("1/0="+(1/0));//有算数异常
    }
    public void show(){
        System.out.println("这个方法不会有异常");
    }
}

注解代码

package annotiation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface check {

}

检查异常代码

package annotiation;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class checkTest {
    public static void main(String[] args) throws IOException {
        int number =0;
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("日志.txt"));
        //创建计算器对象
        jisuanqi jisuanqi = new jisuanqi();
        //获取计算器字节码文件,用于获取方法
        Class jisuanqiClass = jisuanqi.getClass();
        //获取方法
        Method[] methods = jisuanqiClass.getMethods();
        //循环遍历判断方法是否有check注解
        for (Method m: methods) {
            //如果有,则执行方法
            if(m.isAnnotationPresent(check.class)){
                //对出现的异常进行捕获,并打印信息
                try {
                    m.invoke(jisuanqi);
                } catch (Exception e) {
                    bufferedWriter.write("出现了"+e.getClass().getSimpleName()+"异常");
                    bufferedWriter.newLine();
                    bufferedWriter.write("异常的信息是:"+e.getCause().getMessage());
                    bufferedWriter.newLine();
                    number++;
                    bufferedWriter.write("----------------------------------");
                    bufferedWriter.newLine();
                }
            }

        }

        //打印异常总次数
        bufferedWriter.write("总共出现了"+number+"次异常");
        bufferedWriter.flush();
        bufferedWriter.close();
    }
}

在这里插入图片描述

原创文章 65 获赞 11 访问量 2080

猜你喜欢

转载自blog.csdn.net/qq_43147121/article/details/104137442
今日推荐