下面是一个简单反射类的应用
学生类
public class Student {
private Student(){
}
public Student(String stuid){
this.stuid = stuid;
}
private String stuid;
public String getStuid() {
return stuid;
}
public void setStuid(String stuid) {
this.stuid = stuid;
}
private void getPicName(String pic){
System.out.println(pic);
}
@Override
public String toString() {
return "Student [stuid=" + stuid + "]";
}
}
反射调用
public class Realize {
public static void main(String[] args) {
try {
//get public Constructor
Class<?> c = Class.forName("com.test.ref.Student");
Constructor<?> constructor = c.getConstructor(String.class);
Object obj = constructor.newInstance("this is my test example");
System.out.println(obj.toString());
//get private Constructor
Constructor<?> co = c.getDeclaredConstructor();
//private constructor need to access
co.setAccessible(true);
obj = co.newInstance();
System.out.println(obj.toString());
//get method
Method method = obj.getClass().getDeclaredMethod("getPicName", String.class);
method.setAccessible(true);
//get all method
Method[] methods = obj.getClass().getDeclaredMethods();
for (Method mm : methods) {
System.out.println("method name : " + mm.getName());
}
//get the parameters of the specified method
Class<?>[] paramClasses = method.getParameterTypes() ;
for (Class<?> class1 : paramClasses) {
System.out.println("parameter type: " + class1.getName());
}
// whether it is a private method
System.out.println(method.getName() + " is private "
+ Modifier.isPrivate(method.getModifiers()));
//call method
method.invoke(obj, "Let me think");
// get all field
Field[] publicFields = obj.getClass().getDeclaredFields();
for (Field field : publicFields) {
System.out.println("field name : " + field.getName());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}