java 反射,访问成员变量

在通过下列一组方法访问成员变量时,将返回Field类型的对象或数组。每个Field对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。
getFields()
getField(String name)
getDeclaredFields()
getDeclaredField(String name)

============================================================================================

/**
 * 
 */
package 访问成员变量;

/**
 * @author tianyu
 *
 */
public class Example {
	int i;
	public float f;
	protected boolean b;
	private String  s;
}


/**
 * 
 */
package 访问成员变量;

import java.lang.reflect.Field;

/**
 * @author tianyu
 *
 */
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Example example=new Example();
		Class eClass = example.getClass();//返回在运行时的类
		//获取所有成员变量
		Field[] fields= eClass.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			System.out.println("=========================");
			Field field=fields[i];//返回缩引上的元素;
			System.out.println("变量名称"+field.getName());
			Class class1=field.getType();//获取类型
			System.out.println("类型为:"+class1);
			boolean b = true;
			while(b){
				//如果改成员变量的访问权限为private则会抛出异常
				try {
					b=false;
					//获取成员变量的值
					System.out.println("修改前的值为:"+field.get(example));
					System.out.println();
					//判断成员变量的值是否为int类型
					if(class1.equals(int.class)){
						System.out.println("利用setlnt()修改成员变量");
						field.setInt(example, 168);
						//判断是否为float类型
					}else if(class1.equals(float.class)){
						System.out.println("利用setFloat修改变量");
						field.setFloat(example, 345.8f);
						//判断是否为boolean
					}else if(class1.equals(boolean.class)) {
						System.out.println("利用setBoolean修改变量");
						field.setBoolean(example, true);
					}else {
						System.out.println("利用set()修改成员变量");
						field.set(example, "qqq");
					}
					
					//获得成员变量的值
					System.out.println("修改后的值为:"+field.get(example));
				} catch (Exception e) {
					System.out.println("在设置成员变量值时抛出的异常,"
							+ "下面执行setAccessible()方法");
					field.setAccessible(true);
					b=true;//异常抛出后b=赋值为true.
				}
			}
		}
	}

}





猜你喜欢

转载自blog.csdn.net/qq_16555461/article/details/78561256
今日推荐