栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义一个注解并使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义一个注解并使用

使用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

    • 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 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号