-------------------------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();
}
}
}
分享到:
相关推荐
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型)并调用方法,创建对象,甚至...
JAVA反射机制应用 JAVA反射机制是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反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
java反射机制和动态代理的原理,熟悉反射机制和动态代理
### Java反射机制详解 #### 一、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编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...