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

java自定义注解知识汇总

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

java自定义注解知识汇总

注解(Annotation) 什么是注解
  • Annotation是从JDK5.0开始引入的新技术

  • Annotation的作用:

    • 文档生成:生成命令javadoc +类名。

      • 作用在类上
        • @author:创建人
        • @version:类版本
        • @since:描述此类从那个jdk版本开始
      • 作用在方法上
        • @param:描述参数
        • @return:表述返回值
    • 分析代码:通过反射机制可以获得指定类,标识的注解信息,来进行代码分析。

    • 编译检查:通过注解可以对代码进行一般的错误检查,例如:@Override

  • Annotation的格式:

    • 注解是以"@注解名"在代码中存在的,可以添加一些参数值,例如:@SuppressWarnings(value=“All”)。
  • Annotation在哪里使用?

    • 可以添加在package、class、method、field等上面,相当于给他们加了些辅助信息,我们可以通过反射机制实现对这些注解的访问。
内置注解
  • @Override:定义在java.lang.Override中,检查是否重写了父类方法。
  • @Deprecated:定义在Java.lang.Deprecated中,标识已过期,已不推荐使用。
  • @SuppressWarnings:定义在java.lang.SuppressWarnings中,压制警告,需要传递一个参数,一般使用@SuppressWarnings(“All”),表示压制所有类型的警告。@SuppressWarnings()注解参数大全
自定义注解
  • 自定义注解格式

    public @interface AnnoTest {}
    
  • 注解本质

    public interface AnnoTest extends    java.lang.annotation.Annotation {}
    
  • 注解属性:就是接口中的抽象方法

    • 方法返回值可以定义为:基本类型,String字符串,枚举类型,注解类型,以上类型的数组类型。
    • 定义了属性后使用注解的时候就需要给其赋值。
      • 定义属性的时候,如果给属性使用了default,在使用的时候就可以不用赋值,默认使用默认值。
      • 如果注解只有一个属性,属性的名字可以定义为value,使用的时候可以省略不写。
      • 数组赋值的时候,需要使用[]包裹,如果数组只有一个值,[]可以省略不写。
  • 元注解:描述注解的注解

    • @Target:用于描述注解的使用位置

      public enum ElementType {
          
          TYPE,
      
          
          FIELD,
      
          
          METHOD,
      
          
          PARAMETER,
      
          
          CONSTRUCTOR,
      
          
          LOCAL_VARIABLE,
      
          
          ANNOTATION_TYPE,
      
          
          PACKAGE,
      
          
          TYPE_PARAMETER,
      
          
          TYPE_USE
      }
      
    • @Retention:用于描述注解被保留的阶段

      public enum RetentionPolicy {
          
          SOURCE,
      
          
          CLASS,
      
          
          RUNTIME
      }
      
    • @documented:生成文档时是否保留注解到API

    • @Inherited:注解是否可以被子类继承

通过反射调用注解测试案例

需求:测试Calculation运算类加减乘除有没有bug。

  • 自定义注解类

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface AnnoTest {
    }
    
  • Calculation运算类

    public class Calculation {
        @AnnoTest
        public void add(){
            System.out.println("我是加法1+1="+(1+1));
        }
        @AnnoTest
        public void subtract(){
            System.out.println("我是减法2-1="+(2-1));
        }
        @AnnoTest
        public void multiply(){
            System.out.println("我是乘法1*1="+(1*1));
        }
        @AnnoTest
        public void divide(){
            System.out.println("我是除法1/0="+(1/0));
        }
    
    }
    
  • 执行类

    public class TestMain {
    
        public static void main(String[] args) throws IOException {
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt"));
            int sum =0;
            //1、获取运算对象
            Calculation calculation = new Calculation();
            //2、获取对象calss类
            Class aClass = calculation.getClass();
            //3、获取所有方法
            Method[] methods = aClass.getMethods();
            for (Method method : methods) {
                //4、遍历是否带注释
                if(method.isAnnotationPresent(AnnoTest.class)){
                    try {
                        //5、带注释的执行
                        method.invoke(calculation);
                    } catch (Exception e) {
                        sum++;
                        //6、出异常后写到日志文件
                        bufferedWriter.write(method.getName()+"方法出现异常!");
                        bufferedWriter.newline();
                        bufferedWriter.write("异常名称	  是:"+e.getCause().getClass().getSimpleName());
                        bufferedWriter.newline();
                        bufferedWriter.write("异常原因:"+e.getCause().getMessage());
                        bufferedWriter.newline();
                        bufferedWriter.write("-------------------------------------------");
                        bufferedWriter.newline();
                    }
                }
            }
            bufferedWriter.write("本次测试一共出现"+sum+"次异常");
            bufferedWriter.flush();
            bufferedWriter.close();
        }
    }
    
  • 结果


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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