反射 怼烎@ 2022-01-17 12:13 231阅读 0赞 # 反射 # ### 类加载器的概述 ### 当程序要使用某个类时,如果该类还未被加载到内存中, 则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。 连接 验证 : 是否有正确的内部结构,并和其他类协调一致 准备 : 负责为类的静态成员分配内存,并设置默认初始化值 解析: 把类中的符号引用转换为直接引用 初始化 就是我们以前讲过的初始化步骤 ### 类的加载时机 ### 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe命令来运行某个主类 ### 类加载器的分类 ### Bootstrap ClassLoader 根类加载器 Extension ClassLoader 扩展类加载器 Sysetm ClassLoader 系统类加载器 ### 类加载器的作用 ### Bootstrap ClassLoader 根类加载器 也被称为引导类加载器,负责Java核心类的加载 比如System,String等。在JDK中JRE的lib目录下rt.jar文件中 Extension ClassLoader 扩展类加载器 负责JRE的扩展目录中jar包的加载。 在JDK中JRE的lib目录下ext目录 Sysetm ClassLoader 系统类加载器 负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径 #### 反射概述 #### JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。 而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象 ##### 获取class文件对象的三种方式 ##### Object类的getClass()方法 静态属性class Class类中静态方法forName() 反射: 就是在运行状态中的一种动态调用方法或者属性的一种机制. * 就是获取字节码文件对象,然后剖析改类中存在哪些构造方法,哪些成员变量,哪些成员方法 * * 类的成员 * 成员变量 Field * 构造方法 Constructor * 成员方法 Method * * 如何获取一个类对应的字节码文件对象: * * a: 第一种通过Object类中的getClass方法 * b: 通过静态属性(class属性) * c: 通过Class类中的一个静态方法: * public static Class forName(String className): * className: 这个表示的是一个类对应的全类名(就是需要加上包名) #### 列: #### public class Student \{ public void test(){ System.out.println("这是一个空参的方法"); } public void test2(String name,int age) { System.out.println("这是一个有参的方法"+name+"==="+age); } public String show(String name, int age) { System.out.println("这是一个有参的方法" + name + "===" + age); return name+"哈哈"; } private String show2(String name, int age) { System.out.println("这是一个有参的方法" + name + "===" + age); return name + "哈哈"; } \} public class MyTest \{ public static void main(String\[\] args) throws Exception\{ Class aClass = Class.forName("org.westos.demo2.Student"); Object obj = aClass.newInstance(); //获取该类所有的成员方法对象,不包括私有的方法,包括父类继承下来方法 Method[] methods = aClass.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } System.out.println("-----------------------"); //获取该类中所有的方法,包括私有的 Method[] declaredMethods = aClass.getDeclaredMethods(); for (Method m : declaredMethods) { System.out.println(m.getName()); } } \} public class MyTest2 \{ public static void main(String\[\] args) throws Exception\{ Class aClass = Class.forName("org.westos.demo2.Student"); Object obj = aClass.newInstance(); //获取单个的非私有方法的对象 Method test = aClass.getMethod("test"); System.out.println(test); 以前要调用一个方法 //Student student = new Student(); //student.test(); test.invoke(obj); System.out.println("--------------------"); //获取一个有参数的方法对象 Method test2 = aClass.getMethod("test2", String.class, int.class); test2.invoke(obj,"abc",100); //获取一个有参数,有返回值的方法对象,并调用该方法执行 Method show = aClass.getMethod("show", String.class, int.class); Object result = show.invoke(obj, "张三", 19); String str= (String) result; System.out.println(str); } \} public class MyTest3 \{ public static void main(String\[\] args) throws Exception \{ Class aClass = Class.forName("org.westos.demo2.Student"); Object obj = aClass.newInstance(); //获取一个私有的方法对象 Method show2 = aClass.getDeclaredMethod("show2", String.class, int.class); show2.setAccessible(true);//取消语法检测 show2.invoke(obj, "王五", 25); \} \} 转载于:https://blog.51cto.com/13852519/2402491
相关 Java反射-反射 API 转自:https://www.jianshu.com/p/e55770dd48d3 涉及这些类 ![watermark_type_ZmFuZ3poZW5naGVpdGk_s 深碍√TFBOYSˉ_/ 2023年01月17日 07:40/ 0 赞/ 195 阅读
相关 反射_反射概述 反射 JAVA反射机制是在运行状态中,对于任意一个 类,都能够知道这个类的所有属性和方法;对 于任意一个对象,都能够调用它的任意一个方 清疚/ 2022年06月17日 02:22/ 0 赞/ 247 阅读
相关 反射 知识点: 1. 类对象概念 2. Class类的使用:创建类对象 3. 动态加载类 4. 获取方法信息 5. 获取成员变量、构造函数信息 6. 方法反射的基本操作 比眉伴天荒/ 2022年04月14日 04:14/ 0 赞/ 201 阅读
相关 反射 // 1.定义一个标准的JavaBean,名叫Person,包含属性name、age。 // 使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调 Dear 丶/ 2022年04月03日 08:16/ 0 赞/ 207 阅读
相关 反射 > JAVA反射机制是在运行状态中 > > 对于任意一个类,都能够知道这个类的所有属性和方法; > > 对于任意一个对象,都能够调用它的任意一个方法和属性; > > 这种 柔光的暖阳◎/ 2022年02月16日 13:24/ 0 赞/ 154 阅读
相关 反射 反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态 喜欢ヅ旅行/ 2022年01月25日 19:23/ 0 赞/ 108 阅读
相关 反射 反射 类加载器的概述 当程序要使用某个类时,如果该类还未被加载到内存中, 则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将c 怼烎@/ 2022年01月17日 12:13/ 0 赞/ 232 阅读
相关 【反射】 JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法 比眉伴天荒/ 2021年11月09日 20:40/ 0 赞/ 491 阅读
相关 反射 反射机制简述 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的 小咪咪/ 2021年09月27日 14:00/ 0 赞/ 375 阅读
相关 反射 RTTI -------------------- 运行时类型识别(RTTI, Run-Time Type Identification)是Java中的机制,在Jav 不念不忘少年蓝@/ 2021年09月23日 00:44/ 0 赞/ 309 阅读
还没有评论,来说两句吧...