先创建一个类
public class Person {
private String name;
public int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
private Person() {
super();
}
private Person(int age) {
super();
this.age = age;
}
private void fun1(){
System.out.println("fun1......");
}
public int fun2(int age){
System.out.println("fun2..........");
return age;
}
public void fun3(){
System.out.println("fun3.......");
}
}
在另一个测试代码中
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class GetAndGetdeclared {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException,
SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException,
InstantiationException, InvocationTargetException {
Class c1 = Class.forName("包名.Person"); //写全包名.类名
//获取构造函数,创建对象
Constructor c = c1.getConstructor(String.class, int.class); //获取指定的构造函数
Person p1 = (Person) c.newInstance("xixi",22); //通过构造函数,创建了对象
//获得单个属性对象,私有的属性
// Field f = c1.getField("name"); //getField获取的是公共的属性,获取不了私有的属性,要使用getDeclaredField
Field f = c1.getDeclaredField("name");
//私有的属性不能直接设置,也不可以获取,回在运行的时候抛出异常
//要先将f对象设置为可以在类外面设置私有属性的值
f.setAccessible(true);
System.out.println(f.get(p1));
f.set(p1, "haha");
System.out.println(f.get(p1));
//获取公用的public属性,包括继承的
Field fs[] = c1.getFields();
//遍历
for(Field ff : fs){
System.out.println(ff.getName()); //获得属性的名字
}
//获取所有的属性,包括私有的,不包括继承的
Field fs1[] = c1.getDeclaredFields();
for(Field ff1 : fs1){
int num = ff1.getModifiers(); //获取属性的修饰符对应的数字,使用Modifier的toString方法
System.out.println(ff1.getName()+"---"+Modifier.toString(num));
}
//同理getMethods()和getDeclaredMethods(),getConstructors()和getDeclaredConstructs()
//也都是相同的
}
}