ect.demo;
import java.lang.reflect.Field;
public class ReflectDemo3 {
public static void main(String[] args) {
fieldDemo_1();
}
//Filed类存在两种得到字段的方法,一个是得到所有的非私有的字段。另外一个是
//得到所有的字段(包括私有的),但是此时,只提供了对字段的“跟踪”,却不能访问该字段,若想访问,需要暴力破解
public static void fieldDemo_1()
{
String className = "com.reflect.demo.Person";
try
{
Class clazz=Class.forName(className);
Field f=clazz.getDeclaredField("age");
Person p=(Person)clazz.newInstance();
f.setAccessible(true);//暴力破解,让虚拟机不检查该字段的安全性
f.set(p, 22);//修改该对象对应的字段值。
int age =f.getInt(p);//访问字段
System.out.println(age);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
Method类
Method类是
Java类中方法的表示。同上面一样,该类提供了一系列访问与方法有关的对象,比如:返回值,参数(构造方法和方法都有),该类还可以用来调用该对象表示的方法。代码示例:
package com.reflect.demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/*
* 获取指定类中的方法。
*
*/
public class ReflectDemo4 {
public static void main(String[] args) {
methodDemo_2();
}
//得到无参的方法,并回调该对象代表的方法。
public static void methodDemo_1()
{
String className="com.reflect.demo.Person";
try
{
Class clazz =Class.forName(className);
Method m=clazz.getMethod("show", null);
Person p =(Person)clazz.newInstance();
m.invoke(p, null);
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void methodDemo_2()
{
String className="com.reflect.demo.Person";
try
{
Class clazz =Class.forName(className);
Method m=clazz.getMethod("paramMethod", String.class,int.class);
Person p =(Person)clazz.newInstance();
m.invoke(p, "wangwu",22);
}catch(Exception e)
{
e.printStackTrace();
}
}
}