码迷,mamicode.com
首页 > 其他好文 > 详细

027.2 反射技术 动态获取字段和方法

时间:2018-10-24 15:27:59      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:方法   java   成员   new   bsp   dom   field   对象   declare   

 

##############################################
动态获取字段和暴力访问

String className = "cn.itcast.domain.Person";
Class clazz = Class.forName(className);

String fieldName = "age";

//获取age字段对象。
//        Field field = clazz.getField(fieldName);//获取是公共的字段。
Field field = clazz.getDeclaredField(fieldName);

//        getXXX:获取都是类中公共的成员。
//        getDeclaredXXX:获取本类中已有的成员。
//        System.out.println(field);

//对其进行值的设置,必须先有对象。
Object obj = clazz.newInstance();


//通过查找父类AccessiableObject的方法。setAccessiable(true);
field.setAccessible(true);//取消权限检查,暴力访问。一般不访问私有。
field.set(obj, 30);//IllegalAccessException:age字段是私有的。

System.out.println(field.get(obj));

 

##################################################
获取方法

##Person.java
…
public void show(String name,int age){
    System.out.println("show run...name="+name+",age="+age);
}

public static void staticShow(){
    System.out.println("static show run");
}

...
##
public static void getMethodDemo2() throws Exception {
    String className = "cn.itcast.domain.Person";
    Class clazz = Class.forName(className);
    String methodName = "staticShow";
    
    Method method = clazz.getMethod(methodName, null);
    method.invoke(null, null);
}

public static void getMethodDemo() throws Exception {
    
    String className = "cn.itcast.domain.Person";
    Class clazz = Class.forName(className);
    
    String methodName = "show";
    
    Method method = clazz.getMethod(methodName, String.class,int.class);
    Object obj = clazz.newInstance();
    method.invoke(obj, "wangcai",20);
}

 

027.2 反射技术 动态获取字段和方法

标签:方法   java   成员   new   bsp   dom   field   对象   declare   

原文地址:https://www.cnblogs.com/-nbloser/p/9842405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!