一.
如何获得某个类所对应的Class对象?
1.通过类的.class语法
2.a.通过类的实例的getClass()方法(Object里有这个方法:返回此 对象 的运行时类。)
b.通过第一种方法得到的结果,然后调用getClass()方法也可以
3.通过Class类的静态方法forName()
二.
通过反射方式来调用某个对象的方法的步骤
1.得到该对象所对应的Class对象
2.通过该Class对象得到该类的构造方法所对应的Constructor对象
3.通过该Constructor对象的newInstance方法得到该类的一个实例(对象)
4.通过该Class对象得到该方法所对应的Method对象
5.通过该Method对象的invoke方法进行调用
public class DemoTest2 {
public DemoTest2(String s1, String s2) {
System.out.println(s1);
System.out.println(s2);
}
public void output(String str) {
System.out.println("hello:" + str);
}
public static void main(String[] args) throws Exception {
/**
* 通过反射实现
* */
Class<DemoTest2> clazz = DemoTest2.class;
// 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<DemoTest2> cons = clazz.getConstructor(new Class[] {
String.class, String.class });
// 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method method = clazz.getMethod("output", new Class[] { String.class });
// 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
DemoTest2 test = cons.newInstance(new Object[] { "abc", "xyz" });// 如果上面不使用泛型,这块就要强制类型转换
// 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
method.invoke(test, new Object[] { "zhangsan" });
/**
* 通过原始的写法显示
* */
// new DemoTest2("Java","HuanHuan").output("zhangsan");
}
}
三.
如果想调用类的带参数的构造方法为类生成实例,那么只能通过Constructor类的newInstance方法实现
如果想调用类的不带参数的构造方法为类生成实例,那么就有两种方式:
1.还是通过Constructor类的newInstance方法实现
2.通过Class类的newInstance方法实现
分享到:
相关推荐
6. **插件架构**:通过反射,程序可以加载和调用未知的第三方组件,实现灵活的插件架构。 然而,尽管反射强大,但也有其缺点。反射操作通常比直接调用方法慢,因为它们涉及到运行时的查找和解析。此外,反射可能...
**反射型XSS详解** 反射型XSS,全称为跨站脚本攻击(Cross-Site Scripting),是一种常见的Web应用程序安全漏洞。它涉及到攻击者在Web应用中注入恶意脚本,然后通过诱使用户点击含有这些脚本的特殊URL来执行。由于...
本教材内容涉及的是高中生物人教版第三册教学案的第二章第一节第一课时,主题是“反射与反射弧及兴奋在神经纤维上的传导”。这部分内容属于神经生物学范畴,主要讲解了生物体内神经元之间信息传递的基本过程和机制,...
- 插件系统:加载未知的第三方模块。 9. **反射安全**: 使用反射时,应当注意安全性问题,防止恶意代码通过反射调用敏感方法或访问受保护的数据。可以使用`java.lang.reflect.AccessibleObject`的`setAccessible...
3. 第三方库适配:当第三方库未公开某些接口时,反射可以用来实现功能扩展。 4. 数据绑定框架:如Butter Knife,利用反射实现视图和数据的自动绑定。 5. 组件化开发:在组件之间进行解耦,通过反射实现模块间的通信...
三、Java反射实例 1. 创建对象:通过`Class.newInstance()`创建默认构造器的对象,或`Constructor.newInstance()`创建指定构造器的对象。 ```java Class<?> clazz = Class.forName("com.example.MyClass"); MyClass ...
`invoke()`接受两个参数,第一个是对象实例,第二个是方法的参数列表。 6. **泛型与反射**: 虽然Java的泛型在编译后会被擦除,但在反射中我们仍然可以通过`getGenericInterfaces()`和`getGenericSuperclass()`...
6. **插件架构**:在插件架构中,反射常用于加载和运行未知的第三方组件,因为它们的类型信息在主应用程序编译时不可用。 尽管反射带来了极大的灵活性,但也有一些需要注意的问题: 1. **性能影响**:反射操作通常...
3. **成员访问**:反射允许动态访问类的成员。例如,`std::reflect::get, N>`可以获取类型T的第N个成员,而`std::reflect::invoke, Args...>`则可以在运行时调用函数F。 4. **动态类型检查**:C++的`dynamic_cast`...
3. **从现有对象中获取类型**:利用反射技术可以从一个已存在的对象中获取其类型信息,这对于实现泛型编程或需要根据类型执行不同逻辑的情况非常有帮助。 4. **动态加载特定类型的程序集**:在某些情况下,应用程序...
计算机图形学基础:第三讲 双向反射分布函数
- 动态代理:如Java的InvocationHandler接口实现动态代理,JDK动态代理和CGLIB等第三方库。 - 数据持久化:反射用于序列化和反序列化对象。 - 测试工具:JUnit等测试框架利用反射访问私有方法和字段进行测试。 -...
2. **Class.forName()**:这个静态方法用于加载指定的类,并返回对应的Class对象,它是使用反射的第一步。 3. **Constructor、Method和Field类**:它们分别代表类的构造函数、方法和字段。通过这些类的对象,我们...
3. 库的扩展性:允许第三方开发者扩展库功能,而无需修改库源码。 4. 元数据操作:获取类、方法、属性等的元数据信息。 三、如何使用反射 1. 获取Type对象: ```csharp Type myType = typeof(MyClass); ``` 2. ...
3. **自定义扩展点**:反射允许编辑器定义自定义的扩展点,使得第三方开发者能够轻松地插入新的功能。这些扩展点可能包括新的语言支持、格式化规则、调试器集成等。 4. **元数据驱动的设计**:借助反射,编辑器可以...
第 3 课:类型与变量 第 4 课:常量与运算符 第 5 课:控制语句 第 6 课:数组 array 第 7 课:切片 slice 第 8 课:map 第 9 课:函数 function 第 10 课:结构 struct 第 11 课:方法 method 第12课: 接口 ...
计算机图形学基础:第三讲 双向反射分布函数.pdf
3. **光路的可逆性**:在反射现象中,光路是可逆的,意味着如果光沿反射光线的方向射向镜面,反射后的光线将沿着原来的入射光线方向返回。 4. **镜面反射**:当平行光照射到光滑表面,如镜子,反射光线仍保持平行,...
在北大青鸟ACCP6.0第三学期Y2的JAVA方向课程中,反射作为核心知识点被深入讲解,主要是为了提升学员对于Java动态性以及元数据的理解和应用能力。 一、反射的基础概念 Java反射机制允许我们在运行时分析类的信息,...
3. 计算反射系数:根据上面的公式计算P波反射系数。 4. 输出结果:打印出计算得到的反射系数。 以下是一个简单的C程序示例: ```c #include int main() { float rho1, V1, rho2, V2, R_PP; printf("请输入第...