注解案例--简单的测试框架

目录

 

一、自定义注解

1.自定义注解源代码

2.元注解

二、定义实用类

1.实用类源代码

三、解析注解

1.解析步骤

2.解析注解源代码

3.测试结果:

四、注解小结


 

一、自定义注解

1.自定义注解源代码

package cn.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Check {

}

2.元注解

自定义注解@Check

在自定义中用到了

@Retention(RetentionPolicy.RUNTIME)  该注解是表示用到该注解的注解的作用阶段    
样例注解是:   是保存到字节码文件且被JVM读取到。
@Target({ElementType.METHOD})      该注解是表示用到该注解的注解的作用类型
样例注解是:    是表面该注解的注解是作用在方法上的。

二、定义实用类

1.实用类源代码

package cn;

import cn.test.Check;

public class Calculator {
    @Check
    public void add()
    {
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void sub()
    {
        System.out.println("1-0="+(1-0));
    }
    @Check
public void mul(){
    System.out.println("1*0="+(0*1));
}
@Check
public void div()
{
    System.out.println("1/0="+(1/0));
}

public void show()
{
    System.out.println("无bug.........");
}
}

给加减乘除四个方法加上了@Check注解(进行编译检查)

三、解析注解

1.解析步骤

        (1)

        创建对象
Calculator c=new Calculator();

        (2)

        获取字节码文件对象
Class<? extends Calculator> aClass = c.getClass();

        (3)

        获取所有方法
Method[] methods = aClass.getMethods();

        (4)

                判断方法上是否有Check注解

                要判断  肯定要遍历

                        定义变量  --出现次数

                        定义IO流   把异常写入文档

2.解析注解源代码

package cn.test;


import cn.Calculator;

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

/*
 *简单的测试框架
 *    解析注解
 * 当主方法执行后 会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否异常
 *
 */
public class TestCheck {

    public static void main(String[] args) throws IOException {
//1.创建对象
        Calculator c=new Calculator();

        //2.获取字节码文件对象
        Class<? extends Calculator> aClass = c.getClass();
        //3.获取所有方法
        Method[] methods = aClass.getMethods();
        //4.判断方法上是否有Check注解
        //要判断  肯定要遍历
        int  number=0;  //出现异常的次数
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));

        for (Method method:methods)
        {
            //isAnnotationPresent   方法 判断当前方法  method 对象  有没有指定的注解被加上了  被作用了

            if (method.isAnnotationPresent(Check.class))
            {
//5.有,执行
// 6.捕获异常

                try {
                    method.invoke(c);
                } catch(Exception e){
                    number++;
                    bw.write(method.getName()+"方法异常");
                bw.newLine();
                bw.write("异常名称:"+e.getCause().getClass().getSimpleName());
                bw.newLine();
                bw.write("异常原因:"+e.getCause().getMessage());
                bw.newLine();
                }

            }
            }
        bw.write("本次一个出现"+number+"次异常");
        bw.flush();
        bw.close();
        }








    }


3.测试结果:

注解案例--简单的测试框架

注解案例--简单的测试框架

 

四、注解小结

1.以后大多数时候,我们会使用注解,而不是自定义注解

2.注解给谁看:

(1)编译器

(2)给解析程序使用

3.注解不是程序的一部分,可以理解为注解就是一个标签

 

 

 

版权声明:程序员胖胖胖虎阿 发表于 2023年8月30日 下午1:16。
转载请注明:注解案例--简单的测试框架 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...