1. JAVA类
class MyObj {
private String name;
protected void protectedPrintName() {
System.out.println(name);
}
public void publicPrintName() {
System.out.println(name);
}
private void privatePrintName() {
System.out.println(name);
}
}
2. 反射
// 不能通过MyObj.class.getClass()方式去获取
Class clz = Thread.currentThread().getContextClassLoader().loadClass("com.baobaotao.service.MyObj");
MyObj obj = (MyObj)clz.newInstance();
Field f = clz.getDeclaredField("name");
f.setAccessible(true);// 对于非public属性,在JDK1.5后需要设置访问权限
f.set(obj, "jack");
Method m = clz.getDeclaredMethod("privatePrintName", null);
m.setAccessible(true); // 对于非public方法,在JDK1.5后需要设置访问权限
m.invoke(obj, null);
Method m2 = clz.getDeclaredMethod("publicPrintName", null);
m2.invoke(obj, null);
// 仅返回当前类的所有方法,包括private,protected,public。不返回父类的方法
Method[] arr1 = clz.getDeclaredMethods();//clz.getMethods();
for (Method mm : arr1) {
System.out.println(mm.getName());
}
// 返回当前类和父类的所有public方法
Method[] arr2 = clz.getMethods();
for (Method mm : arr2) {
System.out.println(mm.getName());
}