Java注解——简单的测试框架&案例与反射相同,但是不用配置文件

1.概念描述:

在这里插入图片描述

2.作用分类

在这里插入图片描述

3.JDK:预定义注解:

@Override @Deprecated @SuppressWarning
在这里插入图片描述

4.自定义注解:

在这里插入图片描述
在这里插入图片描述
例如:
在这里插入图片描述
在这里插入图片描述
元注解
@Target @Retention @Documented @Inherited
在这里插入图片描述
在这里插入图片描述

5.在程序中使用(解析)注解

在这里插入图片描述

自定义注解使用案例

不用改代码即可任意对象和执行方法:

案例结构
在这里插入图片描述
自定义注解

package annotation;

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

@Target({ElementType.TYPE})//作用在类中
@Retention(RetentionPolicy.RUNTIME)//运行时起作用
public @interface li {
    String className();

    String methodName();
}

使用注解
在这里插入图片描述

package annotation;

import java.lang.reflect.Method;

@li(className = "annotation.lii", methodName = "show")
public class Annotation_Demo {
    public static void main(String[] args) throws Exception {
        //1.解析注释,获取该类的解码形式
        Class<Annotation_Demo> annotation_demoClass = Annotation_Demo.class;
        //2.上面的注解,其实就是生成一个接口该类的接口我们可以调用它的方法,茹上图所示
 
        li l = annotation_demoClass.getAnnotation(li.class);
        //3.调用注解注解中的方法,返回那些值
        String className = l.className();
        String methodName = l.methodName();
        System.out.println(className+" "+methodName);
        //加载该类井内存
        Class cls1 = Class.forName(className);
        //4创建对象
        Object obj = cls1.newInstance();
        //5.获取方法
        Method method = cls1.getMethod(methodName);
        //6.执行方法
        method.invoke(obj);
    }
}

类,方法

package annotation;

public class lii {

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

}


6.简单的测试框架

1.项目结构

在这里插入图片描述

2.待测试类:

package TestCheck;

public class calculater{
    @Check
    public void add(){
        String s =null;
        s.toString();
        System.out.println("1+1="+(1+1));
    }
    @Check
    public void sub(){
        System.out.println("1-1="+(1-1));
    }
    @Check
    public void mul(){
        System.out.println("1*1="+(1*1));
    }
    @Check
    public void div(){
        int a = 1/0;
        System.out.println("1/0="+(1/0));
    }
    public void show(){
        System.out.println("无异常-----------------");
    }

}

3.自定义注解

package TestCheck;

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 {

}

4.测试方法

package TestCheck;

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

public class TestChect {
    public static void main(String[] args) throws IOException {
        // 1创建类名,待测试
        calculater calculater = new calculater();
        //2.获取字节码对象
        Class cl = calculater.getClass();
        //3.获取所有方法
        int num=0;
        Method[] methods = cl.getMethods();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt"));
        for(Method method:methods){
            //判断方法上是否有注解
            if(method.isAnnotationPresent(Check.class)){
                try {

                    method.invoke(calculater);
                } catch (Exception e) {
                    num++;
                    bufferedWriter.write(method.getName()+"方法出问题");
                    bufferedWriter.newLine();
                    bufferedWriter.write("异常名称"+e.getCause().getClass().getSimpleName());
                    bufferedWriter.newLine();
                    bufferedWriter.write("异常原因"+e.getMessage());
                    bufferedWriter.newLine();
                    bufferedWriter.write("-----------------------");
                    bufferedWriter.newLine();
                }
            }
        }
        bufferedWriter.write("本次测试共出现"+num+"次异常");
        bufferedWriter.flush();
        bufferedWriter.close();

    }
}

5.测试结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值