当前位置: 移动技术网 > IT编程>开发语言>Java > 027.2 反射技术 动态获取字段和方法

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

2018年10月24日  | 移动技术网IT编程  | 我要评论

 

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

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);
}

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网