反射机制看自省(探寻类自身的信息--修改类的信息)

[size=medium]反射机制看自省(探寻类自身的信息--修改类的信息) [/size]

public class TestReflection_2 {

public static void main(String[] args) throws Exception {
/**
* 修改类的属性的值
* */
Object object = new StudentT("Michael",24);
Class cls = object.getClass();

//属性
Field[] fs = cls.getDeclaredFields();
for(Field f:fs){
f.setAccessible(true);//可以在虚拟机中使用安全策略来屏蔽掉这种机制
System.out.println("\t" + f.getName() + " : " + f.get(object));//如果这样写是会报错的,因为有的属性是private

//改变属性的值
if(f.getType().getSimpleName().equals("String")){
f.set(object, "Bryant");
}else if(f.getType().getSimpleName().equals("int")){
f.set(object, 23);
}
System.out.println("\t" + f.getName() + " : " + f.get(object));//如果这样写是会报错的,因为有的属性是private
}

//方法
//---->Method[] methods = cls.getMethods();//得到所有方法
Class[] params = {String.class, int.class};
Method method = cls.getMethod("study", params);

//调方法的时候,我们要放入方法体中的是一个实参,应该是一个对象数组
Object[] objs = {"Core Java", new Integer(6)};
Object o = method.invoke(object, objs);
System.out.println("\t" + o);


//构造方法 Construtctor, 通过类对象,其本身就可以调用newInstance()方法来创建类的对象
//这个的意思是说,类在创建的时候必须要含有一个无参的构造方法
//那是不是说,如果没有无参构造方法,就不能利用发射来创建对象了呢?
//答案是否定的
//这个时候 你需要做的是首先利用反射拿到(怎么拿,还是用参数表)有参的那个构造方法,
//使用参数表的时候,利用getConstructor()这个方法拿到构造方法对象,
//然后用构造方法的这个对象调用newInstance()方法,这样就可以得到你想要的对象了

}
}

class StudentT{

private String name;
private int age;
//public String hobby;

//构造方法
public StudentT(){

}
public StudentT(String name, int age){
this.name = name;
this.age = age;
}
public void study(){
System.out.println("StudentT " + name +" studies");
}
public String study(String course, int time){
System.out.println("\t" + "StudentT " + name +" studies " + course +" " + time + " times" );
if(time >=3)return "Good";
return "Bad";
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
/*public void setHobby(String hobby) {
this.hobby = hobby;
}*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值