反射-访问类变量的方法

来源:互联网 发布:淘宝一般违规累计扣分 编辑:程序博客网 时间:2024/06/05 02:11


   通过java的反射机制,可以轻松获得类变量的所有信息,并且可以修改变量的值,如果这些属性是private活protected的,则必须设置setAccessible(true)的方法,否则会抛出IllegalAccessException异常,如果java安全机制,则可能会抛出securityException异常


import java.lang.reflect.Field;public class fieldTest {public static void main(String[] args) throws IllegalAccessException{House house=new House("gdgdg",160,300,"peking wangfujing","wang");Class c=house.getClass();Field[] fields=c.getDeclaredFields();System.out.println("共有成员变量:"+fields.length);System.out.println("-----------------------------");for(Field field:fields){field.setAccessible(true);Class t=field.getType();if (t==String.class){System.out.println(field.getName()+":"+field.get(house));}if(t ==int.class){System.out.println(field.getName()+":"+field.getInt(house));}}System.out.println("\n 变量设置新值");System.out.println("----------------------");for(Field field:fields){field.setAccessible(true);String n=field.getName();if (n.equalsIgnoreCase("owner")){field.set(house,"wang liang");}if (n.equalsIgnoreCase("space")){field.set(house,field.getInt(house)*2);}if (n.equalsIgnoreCase("price")){field.set(house,field.getInt(house)*2);}if (n.equalsIgnoreCase("address")){field.set(house,"fujian yongding");}if (n.equalsIgnoreCase("name")){field.set(house,"wanglu house");}    }for(Field field:fields){System.out.println(field.getName()+":"+field.get(house));}}} class House{public String owner;protected int space;private int price;private String address;private static String name;public House(){}public House(String owner,int space,int price,String address,String n){this.owner=owner;this.space=space;this.price=price;this.address=address;name=n;}}

结果:


house的实例获得了class对象,通过class对象获取的house的所有属性,并将变量的名字和字值打印出来,然后通过设置setAccessible(true)方法,修改house的公共变量和私有变量。



0 0
原创粉丝点击