关于java 反射
在运行状态下,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这样动态获取的信息以及动态调用对应的方法的功能称为java语言的反射机制。在运行时判断任意一个对象所属的类;在运行事构造任意一个对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。代码实例如下:
public class HelloBusiness {
private void say(String name) {
System.out.println("world is on and" + name);
}
private void privateFunc(){
}
public void publicFunc(){
}
private String schoolName="will";
public String getSchoolName(){
return schoolName;
}
}
public static void main(String[] args) throws RuntimeException {
try {
Class helloCls = Class.forName("com.suning.business.HelloBusiness");
HelloBusiness obj=(HelloBusiness)helloCls.newInstance();
Method method=helloCls.getDeclaredMethod("say", new Class[]{String.class}); // 如果使用getMethod()获取不到private 方法
method.setAccessible(true); // 不设置会报错
method.invoke(obj, new Object[]{"xxooo"});
// Method privateMethod=helloCls.getMethod("privateFunc", null);
Method privateMethod1=helloCls.getDeclaredMethod("privateFunc", null);
Method publicMethod=helloCls.getMethod("publicFunc", null);
Field field1=helloCls.getDeclaredField("schoolName");
field1.setAccessible(true);
field1.set(obj, "jack");
System.out.println(obj.getSchoolName());
} catch (Exception e) {
}
注意:对于私有方法和私有field,要设置可以访问性,否则报错处理。
浙公网安备 33010602011771号