• 注解&反射学习笔记


    1、注解的作用域及使用方式

    //表示我们的注解可以使用在那些地方
    @Target(value={ElementType.METHOD,ElementType.TYPE})
    //表示注解在什么地方有效。  RESOUT 源码 < CLASS 类 < RUNTIME运行时
    @Retention(value=RetentionPolicy.RUNTIME)
    @Documented //表示是否将我们的注解生成在JAVAdoc中
    @Inherited //子类可以继承父类的注解
    public @interface MyAnnotation{
        String name() default "yog"; //如果不设置默认值,使用时必须添加参数.
        String[] school() default {"清华","厦大"};
    }
    ​
    eg: 
    //@MyAnnotation(name="yog") 当自定义的注解没有设置默认值时的使用方式。
    @MyAnnotation
    public class test{
        @MyAnnotation   
        public void testMenthod(){}
    }

    反射学习笔记

    学前掌握

    1、动态语言:是一类运行时可以改变结构的语言,如函数、对象(js、Object-C、C##)

    function f(){
        var x = "var a=2; b=3; alert(a+b);"
        evel(x) // 以代码形式执行x
    }

    2、静态语言:与动态语言相反。 java、 C

    3、反射相关的API

    * java.lang.Class 代表一个类(对象)
    * java.lang.reflect.Menthod 代表类的方法
    * java.lang.reflect.Field 代表类的成员变量
    * java.lang.reflect.Constructor 代表类的构造器

    1、概念

    1、Reflection反射 是java被视为动态语言的关键,反射机制允许程序在执行期借助与Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

    Class c = Class.forName("java.lang.String")

    2、加载完类之后,在对内存的方法区中就产生了一个Class类型的对象(一个类只有一个对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一个镜子,透过镜子可以看到这个类的结构,所以称为反射:

    • 正常方式: 引入需要的包类名称 --> 通过new实例化 --> 取得实例化对象

    • 反射方式:实例化对象 --> getClass()方法 -->取得完整的包类名称

    2、实际操作

    public class Test{
        //通过反射获取类的Class对象
        Class user1 = Class.forName("com.yog.User");
        Class user2 = Class.forName("com.yog.User");
        user1.setName("yog");
        user1.getName();
        user2.setName("yog");
        user2.getName();
      /**
       * 知识点:
       * 1、因为一个类在内存中只有一个Class对象 
       * 2、一个类被加载后,类的整个结构都会被封装在Class对象中。
       */
      // user1 == user2 结果为:true  
    }
    class User{
        public String name;
        public int age;
        ...get
        ...set
        ...toString()
    }
    ​
    ​

    3、类初始化

    • 主动调用 new XXclass();会触发父类的初始化。

    • 通过反射被动加载,也会触发父类的初始化。

    • 静态方法调用,不会触发父类的初始化。

  • 相关阅读:
    效率系列(九) macOS入门各式快捷操作
    React项目-Cesium地图初始化
    HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
    docker部署JAVA项目
    PAT 1017 Queueing at Bank
    kali工具熟悉——网络扫描
    pytorch固定随机数中种子
    vscode快捷键
    2760.最长奇偶子数组
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter13-更多的结构化命令
  • 原文地址:https://blog.csdn.net/github_34367377/article/details/127125879