• 注解和反射的简单学习


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

    注解(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() 类的实例对象  
  • 相关阅读:
    【leetcode】13. Roman to Integer
    【leetcode】12. Integer to Roman
    【leetcode】11. Container With Most Water
    Linux 学习总结(五)-linux 文件系统及相关命令
    Linux学习总结(四)-两种模式修复系统,单用户,救援模式
    Linux学习总结(三)之 putty,xshell远程连接及密钥认证篇
    Linux学习总结(二) 网络配置-NAT方式静态IP配置篇
    Linux学习总结(一) windos环境vmware安装centos7
    看完这篇Linux基本的操作就会了
    linux下tar命令详解
  • 原文地址:https://www.cnblogs.com/clove00/p/13067391.html
Copyright © 2020-2023  润新知