027.2 反射技术 动态获取字段和方法
程序员文章站
2022-08-09 19:20:49
##############################################动态获取字段和暴力访问 ##################################################获取方法 ......
##############################################
动态获取字段和暴力访问
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); }
上一篇: iOS网络层架构设计1
下一篇: ELK环境配置+log4j日志记录