zoukankan      html  css  js  c++  java
  • java注解 与 反射

    java注解 与 反射

    java(Annotation)注解,要通过反射(Reflection)才能发挥其强大的功能

    一:注解

    1:什么是注解(Annotation)?

        * 注解:说明程序的。给计算机看的
        * 注释:用文字描述程序的。给程序员看的

        * 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
        * 概念描述:
            * JDK1.5之后的新特性
            * 说明程序的
            * 使用注解:@注解名称

     * 作用分类:
            ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
            ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
            ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】


    2:内置注解: JDK中预定义的一些注解

       * @Override    :检测被该注解标注的方法是否是继承自父类(接口)的
            * @Deprecated:该注解标注的内容,表示已过时
            * @SuppressWarnings:压制警告
                * 一般传递参数all  @SuppressWarnings("all")


    3:元注解:用于描述注解的注解

          * @Target:描述注解能够作用的位置
                    * ElementType取值:
                        * TYPE:可以作用于类上
                        * METHOD:可以作用于方法上
                        * FIELD:可以作用于成员变量上
                * @Retention:描述注解被保留的阶段
                    * @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
                * @Documented:描述注解是否被抽取到api文档中
                * @Inherited:描述注解是否被子类继承

    //定义一个注解
    //Target 表示这个注解可以用在哪些地方 方法上,参数上?
    //FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE,TYPE_PARAMETER,TYPE_USE,MODULE;
    //ElementType.CONSTRUCTOR: 构造器声明
    //ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
    //ElementType.LOCAL_VARIABLE: 局部变量声明
    //ElementType.METHOD: 方法声明
    //ElementType.PACKAGE: 包声明
    //ElementType.PARAMETER: 参数声明
    //ElementType.TYPE: 类、接口(包括注解类型)或enum声明

    @Target(value = {ElementType.METHOD,ElementType.TYPE}) //Retention 表示我们的注解在什么地方有效 SOURCE,CLASS,RUNTIME; @Retention(value = RetentionPolicy.RUNTIME) //Documented 表示是否将这个注解生成在javadoc文档中 @Documented //Inherited 表示子类可以继承父类的注解 @Inherited @interface MyAnnotation{ }

    4:简单的注解编写,运用

    public class testDemo2 {
        
        @MyAnnotation2(age = 22 , name = "wu小强")
        public void test2(){
        }
    
        //当参数只有一个的时候,参数名可以省略,及下面的value
        // @MyAnnotation3(value="wu小强")
        @MyAnnotation3("wu小强")
        public void test3(){
            
        }
    }
    
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation2{
        // 注解的参数 : 参数类型 + 参数名 () +默认值
        String name() default "";
        int age();
        int id() default -1;//如果默认值为-1,代表不存在
        String[] schools() default  "四川大学,成都大学";
        
    }
    @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @
    interface MyAnnotation3{ String value(); }

    二:反射 (Reflection)

    下面这一篇讲反射讲得很好

    https://www.cnblogs.com/lishisan/p/11219404.html#_label1

  • 相关阅读:
    JSON.parse()与JSON.stringify()的区别
    响应式布局
    document.selection
    jQuery $.proxy() 方法
    <转> 键值表
    jquery-jqzoom 插件 用例
    jquery 笔记
    前端表单验证常用的15个JS正则表达式<转>
    css 问题解决
    <转>break与continue
  • 原文地址:https://www.cnblogs.com/cbpm-wuhq/p/12745390.html
Copyright © 2011-2022 走看看