`

Java反射实践总结

 
阅读更多
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反射详解 Java反射是Java编程语言的一个强大特性,允许程序在运行时检查和操作类、接口、字段和方法等。本文章旨在深入解析Java反射机制,包括其原理、应用以及常见用法。 #### 了解Class对象 在Java中,...

    java反射笔记

    总结起来,“java反射笔记”涵盖了Java反射的基本概念、使用方式以及在Eclipse环境下的一些注意事项。通过对`Class`、`Method`和`Field`对象的操作,我们可以实现动态编程,增强代码的灵活性,但同时也需要注意性能...

    利用java反射机制的建议计算器源码

    在提供的`反射总结.doc`文件中,可能包含了关于反射机制更深入的理论知识和最佳实践,而`calc`可能是实现这个计算器项目的源代码文件。阅读和分析这些资源将进一步加深你对Java反射机制的理解。

    java反射基本方法测试

    总结,Java反射提供了强大的能力来探索和操作运行时的类结构。它允许我们在不了解具体类型的情况下创建和操作对象,这在编写动态、灵活的代码时非常有用。然而,由于其潜在的安全风险和性能影响,应该谨慎使用。在`...

    android系统java反射机制详解

    总结,Java反射机制为开发者提供了强大的能力,但同时也带来了一定的挑战。在Android开发中,合理利用反射可以提升代码的灵活性,但需谨慎使用,以免对性能和安全性产生负面影响。理解并掌握反射机制,是成为高级...

    简单的java反射dome

    总结,Java反射机制是Java语言的强大工具,它提供了一种灵活的方式来探索和操作类的内部结构,极大地扩展了Java程序的动态性。通过熟练掌握反射,开发者能够更好地应对各种复杂编程场景,但也需注意其可能带来的性能...

    Java反射机制

    总结起来,Java反射机制是Java动态性的重要体现,它使程序在运行时具有了更强的灵活性和可扩展性。通过反射,开发者可以实现许多常规编程无法完成的功能,但同时也需要注意其潜在的风险和性能问题。在实践中,合理...

    java 反射 线程ppt

    总结一下,Java反射和线程是Java编程中不可或缺的部分。理解并熟练掌握这两个概念,不仅可以帮助我们编写出更加灵活和高效的代码,还能提升我们解决复杂问题的能力。在学习过程中,可以通过阅读《Java核心技术卷》、...

    java-reflection-Xiangjie.rar_java 反射

    总结起来,Java反射是Java语言的一个重要特性,它提供了对运行时类信息的访问和操作能力,极大地增强了代码的灵活性和可扩展性。然而,使用反射时需要注意其性能影响和安全问题,确保在合适的情况下谨慎使用。

    JAVA 反射PPT的示例代码

    Java反射是Java编程...总结起来,Java反射是一个强大的工具,它提供了程序在运行时检查和操作类的能力。通过学习和实践PPT中的示例代码,开发者可以更好地理解和利用这一特性,解决一些常规编程方式无法解决的问题。

    经典java反射和动态代理代码

    总结,Java反射和动态代理是强大的工具,可以极大地提升代码的灵活性和可扩展性。"reflections"项目通过实践示例,让我们更直观地理解了这两个概念,对于学习和掌握Java高级特性的开发者来说,是非常宝贵的资源。

    Java反射机制学习总结.doc

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这种能力使得Java具备了高度的灵活性和动态性,尤其是在处理未知类或者需要在运行时决定行为的情况下。以下...

    Java反射机制.工作原理

    总结,Java反射机制提供了强大的元编程能力,允许程序在运行时动态地操作类和对象,但同时也需要开发者关注其潜在的安全性和性能问题。理解和合理运用反射,能够极大地增强代码的灵活性和扩展性。

    java反射

    总结,Java反射是Java语言的重要组成部分,它提供了强大的能力来探索和操作类的内部结构。然而,它也带来了一些潜在的风险,如性能损失和安全问题,因此在使用时应权衡利弊,合理运用。通过理解和掌握反射机制,...

    利用Java的反射与代理实现IOC模式

    在这个主题中,我们将深入探讨Java反射和动态代理如何帮助我们实现IOC。 首先,让我们理解Java反射。反射允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在IOC中,反射用于在...

    Java反射机制的学习总结.docx

    Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并进行操作,大大增强了代码的灵活性。在Java中,反射机制的核心在于`Class`类,它代表了运行时的类信息。通过`Class`对象,我们可以动态地...

    Java反射机制_源代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...在"Java反射机制_源代码"中,你将找到关于这些概念的示例和实践代码,帮助你更好地理解和应用Java反射。

Global site tag (gtag.js) - Google Analytics