注解和反射

Posted zwcnblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注解和反射相关的知识,希望对你有一定的参考价值。

一、注解

       英文:Annotation

      1.1 注解的概念

              注解也叫元数据,用来标记代码,描述数据,是有特殊意义的。

     1.2 注解作用

              1、Javadoc将文档注释生成api文档时,会将一些注解内容生成到Api文档中,如               @return @see @param

              2、编译时进行格式检查,如@Override

              3、使用注解,减少配置文件,如框架中。

              4、抑制警告

     1.3 四个内置注解

              就是java写好的注解,直接用。

              @Override:标记重写方法

              @Deprecated:标记方法已过时,但是也可以用

              @SuppressWarnings():抑制编译器警告,可以抑制字节结构体范围内“{ }” 的警告,如eclipse中的黄线

              @SafeVarargs:抑制堆污染警告(单独警告),如可变参数和泛型同时使用情况

      技术分享图片

             

      1.4 四个元注解

              在定义注解时,用于注解注解的注解

              @Target:被标记的注解可以注解的位置

              ElementType是枚举类型,位置有:

                                   TYPE : 类型

                                   FIELD : 字段

                                   METHOD : 普通方法

                                   PARAMETER : 参数

                                   CONSTRUCTOR : 可以标记构造方法

                                   LOCAL_VARIABLE : 局部变量

                                   ANNOTATION_TYPE :可以标记在注解上面

                                   PACKAGE :包

                                   TYPE_PARAMETER  形式参数类型

                                   TYPE_USE      :哪里都可以标记

              @Retention:被标记的注解存在的生命周期

              RetentionPolicy是枚举类型,生命周期有:

                            SOURCE: java源码.java文件中可以存在

                          CLASS :编译之后的字节码文件中可以存在

                           RUNTIME :运行时编译成字节码了,放入到jvm中了,这个注解还在

              @Documented:被标记的注解生成文档时是否生成在文档中

              @Inherited:被标记的注解在类继承中是否被继承

      1.5 自定义注解

              在以后的实际开发中,我们基本上不会自定义注解,都是用别人定义好的。我们自 定义的注解,如果没有第三方程序(使用反射技术)的支持,是没有任何意义的。

             技术分享图片

 

二、反射

       英文:Reflect

      2.1 面向对象再次理解

              Java语言设计时,就是想将生活中的对象与对象之间的关系在计算机中体现,万事万物皆对象,而对象又可以分类即是类,类是描述对象的一个抽象模板,在编程时我们主要目的就是为了操作数据即是操作对象,数据类型即描述对象的就是类。

      2.2 反射的概念

              Java提供的一项技术,在运行时期动态的获得一个类的属性,方法,构造方法等,并且也可以修改这些东西(私有的也能获得)。Class类就是描述类的类型,一个类只有一个类类型。

     2.3 获取字节码对象

              对象.getClass();

              类名.Class;

              Class.forName(“类的全限定名”);

      

      2.4 各种数据类型获得字节码对象

              基本数据类型

              引用数据类型

              接口

              枚举

              数组

              void

       注意:1、基本数据类型的字节码对象也可以通过包装类型.TYPE获取

              2、void的字节码也可以通过Void. TYPE获取

      2.5 获得构造器

       Constructor<T> getConstructor(Class<?>... parameterTypes) :获得指定公共构造器

       Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :获得构造器(可是私有)

       Constructor<?>[] getConstructors() :获得所有公共构造器

       Constructor<?>[] getDeclaredConstructors() :获得所有构造器(包括私有)

     2.6使用构造器创建对象

   技术分享图片

 

     2.7使用反射技术写注解描述注入对象

  思路:通过反射获取到字段和注解,通过注解值获取注入对象,将对象设置在字段中。

以上是关于注解和反射的主要内容,如果未能解决你的问题,请参考以下文章

java 注解 基本原理 编程实现

理解Android中的注解与反射

Java学习注解和反射超详细笔记

Java反射和注解基础

注解以及注解在反射中的应用

[记录] java反射+注解