Reflect 机制代码


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Reflect {

// 获取属性信息
public static void getFieldsInfo(Class c) {
Field[] f = c.getDeclaredFields();
for (int i = 0; i < f.length; i++) {
System.out.println("\n属 性:\t" + f[i]);
System.out.println("修饰符:\t"
+ Modifier.toString(f[i].getModifiers()));
System.out.println("类 型:\t" + f[i].getType());
System.out.println("属性名:\t" + f[i].getName());
}
}

// 获取方法信息
public static void getMethodsInfo(Class c) {
Method[] m = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println("\n方 法:\t" + m[i].toString());

System.out.println("修饰符:\t"
+ Modifier.toString(m[i].getModifiers()));

System.out.println("返回值:\t" + m[i].getReturnType());

System.out.println("方法名:\t" + m[i].getName());

System.out.print("参 数:\t");
Class[] p = m[i].getParameterTypes();
if (p.length == 0) {
System.out.print("null");
}
for (int j = 0; j < p.length; j++) {
System.out.print(p[j] + "\t");
}
System.out.println();

System.out.print("异 常:\t");
Class[] e = m[i].getExceptionTypes();
if (e.length == 0) {
System.out.print("null");
}
for (int j = 0; j < e.length; j++) {
System.out.print(e[j] + "\t");
}
System.out.println();
}
}

public static void main(String[] args) {
Class c = String.class;
// c = new Integer(5).getClass();
// c = Class.forName(new Integer(5).getClass().getName());
Reflect.getFieldsInfo(c);
Reflect.getMethodsInfo(c);

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java反射示例代码,展示了如何使用反射机制获取类的信息并动态调用方法: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) { try { // 获取类的Class对象 Class<?> clazz = Class.forName("com.example.MyClass"); // 获取类的构造函数 Constructor<?> constructor = clazz.getConstructor(); // 创建对象 Object obj = constructor.newInstance(); // 获取类的公共成员变量 Field field = clazz.getField("myField"); // 设置成员变量的值 field.set(obj, "Hello, Reflection!"); // 获取类的公共方法 Method method = clazz.getMethod("myMethod"); // 调用方法 method.invoke(obj); } catch (Exception e) { e.printStackTrace(); } } } class MyClass { public String myField; public void myMethod() { System.out.println("Hello from myMethod!"); } } ``` 在上述代码中,我们使用`Class.forName()`方法获取到了`MyClass`类的`Class`对象,然后通过反射获取构造函数、成员变量和方法,并使用这些信息进行对象的创建、成员变量的设置和方法的调用。 需要注意的是,反射机制在运行时会涉及到异常处理,所以需要在代码中进行异常捕获和处理。此外,反射机制的使用需要谨慎,因为它可能会降低代码的性能和可读性,所以在实际开发中需要根据具体情况进行权衡和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值