java反射机制及用法 比眉伴天荒 2022-05-08 01:54 245阅读 0赞 ## 一、反射的定义 ## 反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 ## 二、反射的功能 ## Java 反射主要提供以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法); 在运行时调用任意一个对象的方法 **反射最重要的用途就是开发各种通用框架。**很多框架(比如 Spring)都是配置化的(比如通过 XML 文件配置 Bean),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射,运行时动态加载需要加载的对象。 ## 三、反射的基本运用 ## 1、获得class对象 1)使用 Class 类的 `forName` 静态方法 Class cls=Class.forName("com.xxx.testdata"); 2)直接获取某一个对象的class Class cls=testdata.class; 3)调用某个对象的 `getClass()` 方法 StringBuilder str = new StringBuilder("123"); Class<?> klass = str.getClass(); 2、创建class实例 1)使用Class对象的newInstance()方法来创建Class对象对应类的实例 Class<?> c = String.class; Object str = c.newInstance(); 2)先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例 //获取String所对应的Class对象 Class<?> c = String.class; //获取String类带一个String参数的构造器 Constructor constructor = c.getConstructor(String.class); //根据构造器创建实例 Object obj = constructor.newInstance("23333"); System.out.println(obj); ## 四、反射的优缺点 ## 优点: 灵活、自由度高:不受类的访问权限限制,想对类做啥就做啥; 缺点: 性能问题:通过反射访问、修改类的属性和方法时会远慢于直接操作,但性能问题的严重程度取决于在程序中是如何使用反射的。如果使用得很少,不是很频繁,性能将不会是什么问题; 安全性问题:反射可以随意访问和修改类的所有状态和行为,破坏了类的封装性,如果不熟悉被反射类的实现原理,随意修改可能导致潜在的逻辑问题; 兼容性问题:因为反射会涉及到直接访问类的方法名和实例名,不同版本的API如果有变动,反射时找不到对应的属性和方法时会报异常;
相关 Java反射之getGenericSuperclass()用法 import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; ╰+攻爆jí腚メ/ 2022年11月15日 15:50/ 0 赞/ 194 阅读
相关 java反射机制详解及应用 1.如何创建Class的实例(反射的源头) 理解: Class是一个对象,对应一个运行时类。相当于一个运行时类本身充当了Class的一个实例 过程: 源文件经过编译(j 亦凉/ 2022年08月23日 03:52/ 0 赞/ 169 阅读
相关 Java反射机制原理及使用(一) 1.Java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道该类的所有属性和方法。 (1)对于任意一个对象,都能够调用它的任一方法和属性。 (2)j 古城微笑少年丶/ 2022年08月13日 11:40/ 0 赞/ 194 阅读
相关 Java反射机制原理及使用(二) 1.获取字节码文件中的字段: (1)获取公共字段,使用Class中的getField()方法。 注:将Person类中的age访问权限改为public: 女爷i/ 2022年08月10日 12:50/ 0 赞/ 174 阅读
相关 Java 反射之Class用法 下面示范如果通过Class对象获取对应类的信息: package com.reflect; import java.lang.annota - 日理万妓/ 2022年08月07日 13:36/ 0 赞/ 242 阅读
相关 反射用法 上面讲了类加载机制,会将类放到一个池子里面。这时候如果我们想获取某个类,然后调用某个类的方法的话,可以使用反射。 import java.lang.reflect.M 淡淡的烟草味﹌/ 2022年07月13日 09:11/ 0 赞/ 304 阅读
相关 Java反射机制及实例 在研究抽象工厂模式的时候,发现可以使用反射机制改造该模式,于是学习下~ [http://blog.csdn.net/qq924862077/article/details/ Bertha 。/ 2022年06月11日 07:21/ 0 赞/ 192 阅读
相关 java反射机制及用法 一、反射的定义 反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。通过反射 比眉伴天荒/ 2022年05月08日 01:54/ 0 赞/ 246 阅读
相关 Java反射机制及IoC原理 [Java反射机制及IoC原理][Java_IoC] 一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结 末蓝、/ 2022年03月02日 07:14/ 0 赞/ 233 阅读
还没有评论,来说两句吧...