`
yuxiangtong
  • 浏览: 6440 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java反射机制

阅读更多
-------------------------TestReflection01.java-------------------------
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;

@SuppressWarnings("unchecked")
public class TestReflection01 {
	public static void main(String[] args) {
		System.out.println("请输入类型名称:");
		Scanner scan = new Scanner(System.in);
		String className = scan.next();		
		System.out.println("当前类型:" + className);			

		try {
			//获取Class对象
			Class c = Class.forName(className);			
			
			//解析属性信息
			Field[] fs = c.getDeclaredFields();
			for (Field f : fs) {
				System.out.println("----------------------------------------------");
				System.out.println("属性:" + f.toString());
				System.out.println("\t数据类型:" + f.getType());
				System.out.println("\t属性名:" + f.getName());
				int mod = f.getModifiers();				
				System.out.println("\t属性修饰符:" + Modifier.toString(mod));
			}
			
			//解析方法信息
			Method[] ms = c.getDeclaredMethods();
			for(Method m : ms){
				System.out.println("----------------------------------------------");
				System.out.println("方法:" + m.toString());				
				System.out.println("\t方法名:" + m.getName());
				int mod = m.getModifiers();				
				System.out.println("\t方法修饰符:" + Modifier.toString(mod));
				System.out.print("\t方法参数列表:");
				Class pts[] = m.getParameterTypes();
				for (int i = 0; i < pts.length; i++) {
					Class class1 = pts[i];
					if(i != 0 )
						System.out.print(", ");
					System.out.print(class1);
				}	
				System.out.println();
				System.out.println("\t返回值类型:" + m.getReturnType());
			}
			
			//解析构造方法信息
			Constructor[] cs = c.getDeclaredConstructors();
			for (Constructor con : cs) {
				System.out.println("----------------------------------------------");
				System.out.println("构造方法:" + con.toString());				
				System.out.println("\t方法名:" + con.getName());
				int mod = con.getModifiers();				
				System.out.println("\t方法修饰符:" + Modifier.toString(mod));
				System.out.print("\t方法参数列表:");
				Class pts[] = con.getParameterTypes();
				for (int i = 0; i < pts.length; i++) {
					Class class1 = pts[i];
					if(i != 0 )
						System.out.print(", ");
					System.out.print(class1);
				}	
				System.out.println();
			}			
			System.out.println("----------------------------------------------");
			
			//解析当前类类型的父类
			Class superClass = c.getSuperclass();
			System.out.println("当前类的父类:" + superClass.toString());			
			System.out.println("----------------------------------------------");
			
			//解析当前类实现的接口
			Class[] interfaces = c.getInterfaces();
			System.out.print("当前类所实现接口:");
			for (Class class1 : interfaces) {
				System.out.print(class1.toString() + "\t");
			}			
			System.out.println("\n----------------------------------------------");
			
			//解析当前类型所在包信息
			Package p = c.getPackage();
			System.out.println("当前类所在包" + p.toString());
		} catch (ClassNotFoundException e) {			
			e.printStackTrace();
		}
	}
}


-------------------------TestReflection02.java-------------------------
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import p2.User;

@SuppressWarnings("unchecked")
public class TestReflection02 {
	public static void main(String[] a) throws Exception{
		User p1 = new User("张三",18);		
		TestReflection02 t = new TestReflection02();

		System.out.println("----------------------------------------");
		t.mf1(p1,"name","李四");
		t.mf1(p1,"age",30);
		System.out.println(p1);
		
		System.out.println("----------------------------------------");
		t.mf2("p2.User", "total",88);
		
		System.out.println("----------------------------------------");
		Class[] argTypes = {String.class,int.class};
		Object[] args = new Object[]{"王五",99};
		t.mf3(p1, "setAll",argTypes,args);
		System.out.println(p1);
		
		System.out.println("----------------------------------------");
		t.mf4("p2.User", "showTotal",null,null);		
	}
	
	//直接操作对象属性
	public void mf1(Object o,String fieldName,Object newValue) throws  NoSuchFieldException, IllegalAccessException {
		Class c = o.getClass();  
		Field f = c.getField(fieldName);
		Object fv = f.get(o);
		System.out.print("修改前:" + fieldName + "=" + fv);
		f.set(o,newValue);
		System.out.println("\t修改后:" + fieldName + "=" + f.get(o));		
	}
	
	//直接操作类属性
	public void mf2(String className,String fieldName,Object newValue) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
		Class c = Class.forName(className);
		Field f = c.getField(fieldName);
		Object fv = f.get(c);
		System.out.print("修改前:" + fieldName + "=" + fv);
		f.set(c,newValue);
		System.out.println("\t修改后:" + fieldName + "=" + f.get(c));
	}	

	//调用对象成员方法
	public void mf3(Object o,String methodName,Class[]argTypes,Object[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
		Class c = o.getClass();
		Method m = c.getMethod(methodName, argTypes);
		Object result = m.invoke(o, args);
		System.out.println(result);
	}	
	
	//调用类成员方法
	public void mf4(String className,String methodName,Class[]argTypes,Object[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		Class c = Class.forName(className);
		Method m = c.getMethod(methodName, argTypes);
		Object result = m.invoke(null, args);
		System.out.println("result:" + result);
	}		
}

-------------------------TestReflection03.java-------------------------
/**
 * 
 */
import java.lang.reflect.*;

@SuppressWarnings("unchecked")
public class TestReflection03 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Class c;
		try {
			c = Class.forName("p1.Person");
			
			//调用有参数的构造方法
	        Class[] argTypes = {String.class,int.class};
	        Constructor constructor = c.getConstructor(argTypes);
	        Object obj = constructor.newInstance("中国",5000);
	        System.out.println(obj);
	        
	        //调用无参构造方法1
	        constructor = c.getConstructor();	        
	        //constructor = c.getConstructor(new Class[0]);
	        //constructor = c.getConstructor(null);
	        obj = constructor.newInstance();
	        System.out.println(obj);
	        
	        //调用无参构造方法2
	        obj = c.newInstance();
	        System.out.println(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

1
0
分享到:
评论

相关推荐

    java反射机制.zip

    java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...

    java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型)并调用方法,创建对象,甚至...

    JAVA反射机制应用

    JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

    一个例子让你了解Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...

    java 反射机制

    ### Java反射机制深入理解 #### 一、反射机制概述 Java反射机制是一种强大的工具,它允许程序在运行时检查和操作任何类、方法、构造函数和字段等元素。这种能力对于构建灵活的应用程序和框架非常有用,特别是那些...

    JAVA反射机制的简单理解

    Java反射机制是Java语言提供的一种强大工具,它允许在程序运行时动态地获取类的信息以及对类的对象进行操作。在Java中,静态编译时类型检查确保了代码的稳定性,但有时我们需要在运行时根据需求动态地创建对象、调用...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    java 反射机制详解

    Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...

    Java反射机制学习(二)

    这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...

    java反射机制和动态代理的原理

    java反射机制和动态代理的原理,熟悉反射机制和动态代理

    Java反射机制 Java反射机制

    ### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并操作对象。Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用...

    Java反射机制课件ppt

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...

    java反射机制工具类

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...

    java反射机制,很安逸.不要错过

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    java反射机制核心代码

    java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);

    Java反射机制总结(实例分析)

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...

Global site tag (gtag.js) - Google Analytics