import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestReflect {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, NoSuchFieldException {
//1.1 默认构造函数
Constructor<Test> tConstructor = (Constructor<Test>) Class.forName("Test").getConstructor();
Test test = tConstructor.newInstance(new Object[]{});
//1.2 带参数构造函数
Constructor<Test> tConstructor2 = (Constructor<Test>) Class.forName("Test").getConstructor(int.class);
Test test2 = tConstructor2.newInstance(new Object[]{200});
//2.1 普通无参数成员函数
Method method1 = Class.forName("Test").getMethod("sayHello");
method1.invoke(test);
//2.2 带普通参数成员函数
Method method2 = Class.forName("Test").getMethod("run",String.class);
method2.invoke(test2, "haha");
//2.3 参数为数组的成员函数
Method method3 = Class.forName("Test").getMethod("printArray", String[].class);
//method3.invoke(test2, new String[]{"i","am","hello world"})这样子数组会被打开,认为是有四个参数;
method3.invoke(test2, new Object[]{new String[]{"i","am","hello world"}});
//3.静态函数
Method method4 = Class.forName("Test").getMethod("service");
method4.invoke(null);
//4 普通成员
Field afield = Test.class.getDeclaredField("a");
afield.setAccessible(true);
afield.set(test, 99999);
Field bField = Test.class.getDeclaredField("str");
bField.setAccessible(true);
bField.set(test, "i am a field");
System.out.println(test);
//5 静态成员
Field cfield = Test.class.getDeclaredField("c");
cfield.setAccessible(true);
cfield.set(null, 11111);
Test.printStatic();
}
}
//目标类
class Test {
private int a;
private String str;
private static int c;
public Test(int a) {
System.out.println("a: "+a);
}
public Test() {
System.out.println("default constructor");
}
public void sayHello(){
System.out.println("hello world");
}
public int run(String arg) {
System.out.println("run: "+arg);
return 0;
}
public void printArray(String[] array) {
for(String str:array){
System.out.print(str+" ");
}
System.out.println();
}
@Override
public String toString() {
return "a: "+a+" str: "+str;
}
public static void service() {
System.out.println("I am service function");
}
public static void printStatic() {
System.out.println("c: "+c);
}
}
分享到:
相关推荐
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射...以上内容不仅解释了Java反射机制的相关知识点,还通过示例代码进行了实践演示,希望能够帮助你在Java面试中更好地理解和运用这一重要特性。
总结,Java反射是Java语言的一个强大特性,它提供了运行时分析和操作类的能力,极大地拓展了Java的灵活性。然而,使用反射也需要谨慎,合理运用才能发挥其优势,避免潜在的问题。理解并熟练掌握反射,对于提升Java...
### JAVA反射详解 Java反射是Java编程语言的一个强大特性,允许程序在运行时检查和操作类、接口、字段和方法等。本文章旨在深入解析Java反射机制,包括其原理、应用以及常见用法。 #### 了解Class对象 在Java中,...
总结起来,“java反射笔记”涵盖了Java反射的基本概念、使用方式以及在Eclipse环境下的一些注意事项。通过对`Class`、`Method`和`Field`对象的操作,我们可以实现动态编程,增强代码的灵活性,但同时也需要注意性能...
在提供的`反射总结.doc`文件中,可能包含了关于反射机制更深入的理论知识和最佳实践,而`calc`可能是实现这个计算器项目的源代码文件。阅读和分析这些资源将进一步加深你对Java反射机制的理解。
总结,Java反射提供了强大的能力来探索和操作运行时的类结构。它允许我们在不了解具体类型的情况下创建和操作对象,这在编写动态、灵活的代码时非常有用。然而,由于其潜在的安全风险和性能影响,应该谨慎使用。在`...
总结,Java反射机制为开发者提供了强大的能力,但同时也带来了一定的挑战。在Android开发中,合理利用反射可以提升代码的灵活性,但需谨慎使用,以免对性能和安全性产生负面影响。理解并掌握反射机制,是成为高级...
总结,Java反射机制是Java语言的强大工具,它提供了一种灵活的方式来探索和操作类的内部结构,极大地扩展了Java程序的动态性。通过熟练掌握反射,开发者能够更好地应对各种复杂编程场景,但也需注意其可能带来的性能...
总结起来,Java反射机制是Java动态性的重要体现,它使程序在运行时具有了更强的灵活性和可扩展性。通过反射,开发者可以实现许多常规编程无法完成的功能,但同时也需要注意其潜在的风险和性能问题。在实践中,合理...
总结一下,Java反射和线程是Java编程中不可或缺的部分。理解并熟练掌握这两个概念,不仅可以帮助我们编写出更加灵活和高效的代码,还能提升我们解决复杂问题的能力。在学习过程中,可以通过阅读《Java核心技术卷》、...
总结起来,Java反射是Java语言的一个重要特性,它提供了对运行时类信息的访问和操作能力,极大地增强了代码的灵活性和可扩展性。然而,使用反射时需要注意其性能影响和安全问题,确保在合适的情况下谨慎使用。
Java反射是Java编程...总结起来,Java反射是一个强大的工具,它提供了程序在运行时检查和操作类的能力。通过学习和实践PPT中的示例代码,开发者可以更好地理解和利用这一特性,解决一些常规编程方式无法解决的问题。
总结,Java反射和动态代理是强大的工具,可以极大地提升代码的灵活性和可扩展性。"reflections"项目通过实践示例,让我们更直观地理解了这两个概念,对于学习和掌握Java高级特性的开发者来说,是非常宝贵的资源。
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这种能力使得Java具备了高度的灵活性和动态性,尤其是在处理未知类或者需要在运行时决定行为的情况下。以下...
总结,Java反射机制提供了强大的元编程能力,允许程序在运行时动态地操作类和对象,但同时也需要开发者关注其潜在的安全性和性能问题。理解和合理运用反射,能够极大地增强代码的灵活性和扩展性。
总结,Java反射是Java语言的重要组成部分,它提供了强大的能力来探索和操作类的内部结构。然而,它也带来了一些潜在的风险,如性能损失和安全问题,因此在使用时应权衡利弊,合理运用。通过理解和掌握反射机制,...
在这个主题中,我们将深入探讨Java反射和动态代理如何帮助我们实现IOC。 首先,让我们理解Java反射。反射允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在IOC中,反射用于在...
Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并进行操作,大大增强了代码的灵活性。在Java中,反射机制的核心在于`Class`类,它代表了运行时的类信息。通过`Class`对象,我们可以动态地...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...在"Java反射机制_源代码"中,你将找到关于这些概念的示例和实践代码,帮助你更好地理解和应用Java反射。