zoukankan      html  css  js  c++  java
  • 反射机制

    反射机制

    反射机制有什么用?

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

  • 相关阅读:
    从百度文库下载的文档无法打开解决办法
    1
    sqlserver 或者 oracle 查询每科成绩前三名问题
    深度复制
    java 环境搭建
    我的小黑屋
    SQLSERVER 批量去掉外键约束
    linux mingling
    easyui datagrid 自定义editor并根据实际情况(自定义options)判断返回多样的html控件
    sqlserver 循环加类型转换拼接
  • 原文地址:https://www.cnblogs.com/Arong123/p/13416614.html
Copyright © 2011-2022 走看看