• 反射机制


    反射机制

    反射机制有什么用?

    ​ 通过Java语言中的反射机制可以修改操作字节码文件(可以读和修改字节码文件)

    ​ 可以操作代码片段

    反射机制的相关类在哪个包下?

    ​ java.lang.reflext.*

    反射机制相关的重要的类有哪些?

    ​ java.lang.Class 代表整个字节码,代表一个类型,代表整个类

    ​ java.lang.reflect.Constructor 代表字节码中的构造方法字节码,代表类中的构造方法

    ​ java.lang.reflect.Method 代表字节码中的方法字节码,代表类中的方法

    ​ java.lang.reflect.Field 代表字节码中的属性字节码,代表类中的成员变量(静态变量和实例变量)

    ​ java.lang.Class

    public class User{
        //Field
        int no;
        
        //Constructor
        public User(){   
        }
        public User(int no){
            this.no = no;
        }
        
        //Method
        public void setNo(int no){
            this.no = no;
        }
        public int getNO(){
            return no;
        }
    }
    

    获取class的三种方式

    第一种:

    Class c = Class.forName("完整类名带包名");

    Class.forName()要求:

    ​ 1.静态方法

    ​ 2.方法的参数必须是一个字符串

    ​ 3.字符串需要是一个完整的类名

    ​ 4.完整类名必须带有包名。java.lang包也不能省略

    第二种:java中任何一个对象都有一个方法:getClass()

    ​ Class c = 对象.getClass();

    第三种:java语言中任何一种类型,包括基本数据类型,它都有.class属性

    ​ Class z = String.class; //z代表String类型

    ​ Class k = Date.class; //k代表Date类型

    ​ Class f = int.class; //f代表int类型

    ​ Class e = double.class; //e代表double类型

    关于JDK自带的类加载器:

    ​ 什么是类加载器?

    ​ 专门负责加载类的命令/工具

    ​ JDK自带了三个类加载器:

    ​ 启动类加载器(父加载器)rt.java

    ​ 扩展类加载器(母加载器)ext/*.jar

    ​ 应用类加载器 classpath

    ​ 假设有这样一段代码:

    String s = "abc";
    

    ​ 代码在开始执行之前,会将所需要类全部加载到JYM中。

    ​ 通过类加载器加载,看到以上代码类加载器会找到String.class文件,找到就加载,那么是怎么进行加载的呢?

    ​ 首先是通过“启动类加载器”加载

    ​ 注意:启动类加载器专门加载:C:Program FilesJavajdk1.8.0_101jrelib t.jar

    ​ rt.jar中都是JDK最核心的类库。

    ​ 如果通过“启动器加载类”没有加载到,那么会通过“扩展类加载器”加载。

    ​ 注意:扩展类加载器专门加载:C:Program FilesJavajdk1.8.0_101jrelibext*.jar

    ​ 如果“扩展类加载器”没有加载到,那么会通过“应用类加载器”加载。

    ​ 注意:应用类加载器专门加载:classpath中的类。

    ​ Java中为了保证类加载的安全,使用了双亲委派机制,优先从启动类加载器中加载,这个称为“父”,“父”无法加载到,再从扩展类加载器中加载,这个称为“母”。双亲委派。如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。

  • 相关阅读:
    解决pandas_datareader的get_data_yahoo不能读取数据的问题
    python 中使用pandas_datareader 报错 ImportError: cannot import name ‘is_list_like’
    loc、iloc、ix 区别
    利用list元素求和组成某一个固定值
    测试id
    Oracle数据库从入门到精通 多表查询知识以及范例
    Oracle数据库从入门到精通 单行函数问题
    Oracle从入门到精通 限定查询和排序查询的问题
    关于Oracle中sys、system和Scott用户下的数据库连接问题
    Java学习笔记——关于位运算符的问题
  • 原文地址:https://www.cnblogs.com/Arong123/p/13416614.html
Copyright © 2020-2023  润新知