自定义一个注解并使用

使用IDE新建一个文件

 添加四个注解

@Target
@Retention
@Inherited
@Documented
public @interface Check {
}

@Target:

 @Retention

  • 指示要注释具有注释类型的注释的保留时间。 如果注释类型声明中没有保留注释,则保留策略默认为RetentionPolicy.CLASS

  • 参数RetentionPolicy

    • CLASS

      注释将由编译器记录在类文件中,但VM不需要在运行时保留。

      RUNTIME

      注释将由编译器记录在类文件中,并由VM在运行时保留,因此可以反射读取。

      SOURCE

      注释将被编译器丢弃

@Inherited

  • 表示注释类型自动继承

@Documented

  • 表示具有类型的注释默认情况下由javadoc和类似工具记录。

javadoc命令可以生成API文档

使用案例

package annotation.demo;

import java.lang.annotation.*;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Check {
}
package annotation.demo;

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 =" + (1 * 0));
    }
    @Check
    public void div() {
        System.out.println("1 / 0 =" + (1 / 0));
    }
}
package annotation.demo;

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

public class TestCheck {
    public static void main(String[] args) throws Exception {
        // 1.创建计算器对象
        Calculator calculator = new Calculator();
        // 2.获取字节码文件
        Class<? extends Calculator> aClass = calculator.getClass();
        // 3.获取所有方法
        Method[] methods = aClass.getMethods();
        int number = 0;
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt", true));

        for (Method method : methods) {
            // 4.判断是否有 Check注解
            if (method.isAnnotationPresent(Check.class)) {
                // 5.有则执行
                try {
                    method.invoke(calculator);
                    // 6.捕获异常
                } catch (Exception e) {
                    // 7. 记录到文件
                    StringBuffer stringBuffer = new StringBuffer();
                    stringBuffer.append("第 " + (++number) + " 次异常,异常的方法: " + method.getName() + " 异常名称: "
                            + e.getCause().getClass().getSimpleName() + " 异常信息: " + e.getCause().getMessage());
                    bufferedWriter.write(stringBuffer.toString());
                    bufferedWriter.newLine();
                }
            }
        }

        bufferedWriter.flush();
        bufferedWriter.close();
    }
}
第 1 次异常,异常的方法: div 异常名称: ArithmeticException 异常信息: / by zero
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值