注解和反射的简单学习

以前对于这两个概念其实没有多少认识,只知道注解是标记,对于反射的印象就是类比于游戏进度的回显吧,惭愧惭愧~~~学习后有了一些更深入的了解,记录一下,加深印象。

注解(Annotation)

  1. 什么是注解?

    是 JDK5.0 引入的一种注释机制,代码辅助工具,由内置注解和元注解组成。核心作用是对类、方法、变量、参数和包进行标注,通过反射来访问标注信息,以此在运行中改变标注对象的行为。
  2. 内置注解

    @Override(重写方法):被用于标注方法,用于说明所标注的方法是重写父类的方法

    @Deprecated(过时方法):用于说明所标注元素,因存在安全问题或有更好选择而不鼓励使用,如果强行使用,则编译器会发出警告

    @SuppressWarnings(消除警告):用于取消编辑器所显示的警告,有如下属性值

    @SafeVarargs(消除泛型警告) : Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告

    @FunctionalInterface (标记函数): Java 8 开始支持,标识一个匿名函数或函数式接口

    @Repeatable(多次声明) : Java 8 开始支持,标识某注解可以在同一个声明上使用多次

  3. 元注解:java提供了四个用于修饰自定义注解的元注解

    @Target:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素

         ElemenetType.CONSTRUCTOR:构造器声明       
         ElemenetType.LOCAL_VARIABLE:局部变量声明      
         ElemenetType.PACKAGE:包声明 
         ElemenetType.PARAMETER :参数声明 
         ElemenetType.METHOD :方法声明 
         ElemenetType.FIELD:全局属性声明(包括 enum 实例)
         ElemenetType.TYPE:类,接口(包括注解类型)或enum声明 

    @Retention:用于指定被修饰的自定义注解可以保留多久,有三个常用属性
        RetentionPolicy.SOURCE:在源文件中有效(即源文件保留)
        RetentionPolicy.CLASS:在class文件中有效(即class保留)
        RetentionPolicy.RUNTIME:在运行时有效(即运行时保留)   

    @Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中

    @Inherited:如果父类所使用的注解有此修饰,则子类可以继承该注解,否则不能

  4. 自定义注解实例

    1 @Target({ElementType.FIELD,ElementType.TYPE})//可修饰属性和类
    2 @Retention(RetentionPolicy.RUNTIME)//运行时
    3 public @interface RefStudy {
    4 
    5     String name() default "a";
    6     String[] mores();
    7 }

反射(reflection) 

  1.  反射是什么?
    运行过程中,对于任意类,都能知道类的所有属性和方法;对弈任意对象,都能调用它的方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射。
  2. 反射的优缺点
    • 反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力
    • 它允许程序创建和控制任何类的对象,无需提前硬编码目标类
    • 反射会对性能造成一定的影响,同时让代码的可读性变低
  3. 常用方法
    方法名 返回值 参数描述
    Class.forName(String) 类的元信息 类文件的具体位置
    类.getClass() 类的元信息  
    clz.getDeclaredFields() 类中的所有属性  
    getMethods() 类的所有方法  
    invoke(obj) 通过反射执行方法 类的元信息
    getAnnotation(class) 注解 类的Class
    setAccessible(true) 设置当前属性为可见 true或者false
    clz.newInstance() 类的实例对象  
原文地址:https://www.cnblogs.com/clove00/p/13067391.html