使用IDE新建一个文件
添加四个注解
@Target
@Retention
@Inherited
@Documented
public @interface Check {
}
@Target:
-
指示注释类型适用的上下文。
-
参数ElementType[]:
-
-
ANNOTATION_TYPE
注解类型声明
CONSTRUCTOR
构造函数声明
字段
字段声明(包括枚举常数)
LOCAL_VARIABLE
局部变量声明
METHOD
方法声明
PACKAGE
包装声明
PARAMETER
正式参数声明
TYPE
类,接口(包括注释类型)或枚举声明
TYPE_PARAMETER
键入参数声明
TYPE_USE
使用类型
-
@Retention
-
指示要注释具有注释类型的注释的保留时间。 如果注释类型声明中没有保留注释,则保留策略默认为
RetentionPolicy.CLASS
。 -
参数RetentionPolicy
@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