您的位置:首页 > 职场人生

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

2012-09-14 19:05 211 查看
                                          ----------------------    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐