黑马程序员——反射之Field类 成员变量


                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                  

package j2se_develop;

import java.lang.reflect.Field;

/**
 * Field类代表某个类中的一个成员变量
 * 
 * 
 * @author wjw
 *
 */
public class Field_class {
	public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException {
//		method();
		method1();
	}
	public static void method() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		FieldClass fc=new FieldClass(6567657,43243233,"ball","baskball","jack");
		Field f_b=fc.getClass().getField("b");//通过变量名获取对应的Field,但会实例化多个FieldClass类
		System.out.println(f_b.get(fc));//因为有许多FieldClass对象,所以要取出对应的值,要确定具体的FieldClass类对象
		
		//下面用getField获取a的值时,因为a被私有化,所以拿不到
//		Field f_a=fc.getClass().getField("a");//通过变量名获取对应的Field,但会实例化多个FieldClass类
//		System.out.println(f_a.get(fc));//因为有许多FieldClass对象,所以要取出对应的值,要确定具体的FieldClass类对象
		Field f_aa=fc.getClass().getDeclaredField("a");//getDeclaredField()方法,获取只要声明过的就能获取,不管私有还是公有
		f_aa.setAccessible(true);//设置f_aa获取的私有属性强制可以获取,称为暴力反射
		System.out.println(f_aa.get(fc));
	}
	/*
	 * 把字符串参数中所有的b改成a
	 */
	public static void method1() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		FieldClass fc=new FieldClass(244,3,"ball","baskball","jabck");
		//下面是单独过去每一个值
//		Field f_str1=fc.getClass().getField("str1");
//		Field f_str2=fc.getClass().getField("str2");
//		Field f_str3=fc.getClass().getField("str3");
//		String str1=(String) f_str1.get(fc);
//		String str2=(String) f_str2.get(fc);
//		String str3=(String) f_str3.get(fc);
		
		//下面用迭代
		Field[]fields=fc.getClass().getFields();
		for(Field field:fields){
//			if(ff.getType().equals(String.class)){//这种比较方式不是很专业,因为只有一份Class,所以可以直接用==
//			}
			if(field.getType()==String.class){
				String oldStr=(String)field.get(fc);
				String newStr=oldStr.replace('b','a');
				field.set(fc,newStr);//修改值
			}
//			System.out.println(field.get(fc));//显示各个参数值
		}
		System.out.println(fc.toString());
	}
}
class FieldClass{
	private int a;//注意这里,a为私有,要注意
	public int b;
	public String str1;
	public String str2;
	public String str3;
	//两种方式:
	//一:快捷键    alt+shift+s选择Generate Constructor using Fielids...
	//二:击右键    Source 选择Generate Constructor using Fielids...
	//即可生成下面的构造方法,
	public FieldClass(int a,int b,String str1,String str2,String str3) {
		super();
		this.a = a;
		this.b = b;
		this.str1=str1;
		this.str2=str2;
		this.str3=str3;
	}
	public String toString(){
		return this.str1+",,,,,,,"+this.str2+",,,,,,"+this.str3;
	}
}

                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                         详细请查看       http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King·Forward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值