关于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,要设置可以访问性,否则报错处理。

 

posted @ 2017-07-03 11:21  williamcai  阅读(139)  评论(0)    收藏  举报