• annotation注解


    注解和注释的区别:

      注释:给程序员看的;
      注解:给虚拟机看的,让虚拟机看到程序中的注解,注解代表程序的一些特殊功能。

    jdk中提供的注解:

      @Override 描述子类重写父类的方法
        jdk1.5版本的时候,该注解只能应用在类的继承上。
        jdk1.6版本的时候,该注解可以应用在类的实现上。
      @SuppressWarnings() 用来压制警告
        eg: @SuppressWarnings("all") 压制所有警告
      @Deprecated 描述方法过时

    自定义注解:(结合反射才会有意义)

      定义类 class
      定义接口 interface
      定义枚举 enum
      定义注解 @interface

    定义注解的属性:

      注解的属性的类型:
        基本数据类型,字符串类型,Class类型,注解,枚举,以及以上类型的一维数组
      注解的属性定义语法:
        在变量后加括号;
          eg: int a();
      注解的属性默认初始值设置:
        使用default 关键字;
        eg: boolean b() default true;
      注意:当你所定义的属性只有一个时且该属性名为value那么在使用该注解时可以直接写数值,不用写属性名;
      当你所定义的属性有多个,但是除去名为value的属性,其他属性具有default值,那么在使用该注解时亦可以直接写数值不用写属性名;
        eg: //定义注解
        @interface Annos{ String value();}
          //使用注解
        @Annos("zhangsan")
        public class demo{ }

    eg:

    package annotation;
    
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    
    @Anno
    @MyAnno(s="abc",c=String.class,an=@Anno,co=Color.RED,arr= {"abc","bca","cba"})
    public class MyAnnoDemo {
    
    }
    //定义一个无属性的注解
    @Retention(RetentionPolicy.RUNTIME)    //元注解
    @interface Anno{
        
    }
    enum Color{
        RED,BLUE,BLACK,YELLO;
    }
    //定义一个带有属性的注解
    @Retention(RetentionPolicy.RUNTIME)    //元注解
    @interface MyAnno{
        boolean b() default false;    //定义基本数据类型的属性
        String s();    //定义字符串数据类型的属性
        Class c();    //定义Class类型的属性
        Anno an();    //定义注解类型的属性
        Color co();    //定义Color枚举的属性
        String[] arr();    //定义一个String一维数组的属性
    }

    注解存在的阶段:

      源码阶段(默认)
      编译阶段
      运行阶段

    元注解:只用于修饰其他注解。

    自定义注解默认存在于源码阶段,需要让注解存在的时间更长,使用元注解。
      @Retention(RetentionPolicy.SOURCE);//被修饰的注解保存于源码阶段
      @Retention(RetentionPolicy.CLASS);//被修饰的注解保存于编译阶段
      @Retention(RetentionPolicy.RUNTIME);//被修饰的注解保存于运行阶段
        注意:RetentionPolicy是enum枚举类型。

    注解配合反射实现指定的功能:

    1.编写注解
    2.编写自定义类
    3.编写核心运行类

    eg:

    public class CoreRunner {
        public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
            Class clazz = Demo.class;
            Method[] methods = clazz.getMethods();
            for (Method method : methods) {
                //    isAnnotationPresent() 判断该method对象上面是否被指定的注解修饰
                if (method.isAnnotationPresent(Anno.class)) {
                    method.invoke(clazz.newInstance(), null);
                }
            }
        }
    }
  • 相关阅读:
    【python】第一个爬虫:用requests库爬取网页内容
    【python】UDP协议编程
    【python】体育竞技分析:预测球队比赛成绩
    【python】手绘图制作
    【python】成绩表雷达图
    【python】numpy库和matplotlib库学习笔记
    【python】PIL库之图片处理
    【python】PIL库学习总结
    【python】利用jieba中文分词进行词频统计及生成词云
    汉诺塔问题
  • 原文地址:https://www.cnblogs.com/laodang/p/9541187.html
Copyright © 2020-2023  润新知