A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;
import java.lang.reflect.Field;
/*
* 2、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   
public void setProperty(Object obj, String propertyName, Object value){   
}
*/
class obj {
public String propertyName;
}
public class Test2 {
public static void setProperty(Object obj, String propertyName, Object value)
   throws IllegalArgumentException, IllegalAccessException,
   NoSuchFieldException, SecurityException, InstantiationException {
  Class clazz = obj.getClass();
  Field f = clazz.getDeclaredField(propertyName);
  obj o = (obj)clazz.newInstance();
  f.set(o, value);
}
public static void main(String[] args) throws IllegalArgumentException,
   IllegalAccessException, NoSuchFieldException, SecurityException,
   InstantiationException {
  obj o = new obj();
  setProperty(o, "propertyName",  "vlaue");
  System.out.println(o.propertyName);
}
}

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

10 个回复

正序浏览
额 我也是昨天提交的。。。

回复 使用道具 举报
姠佐メ亾佑つ 发表于 2014-10-14 21:05
现在 在为面试做准备的 前面70分 就博客被扣了0.4分(由于赶时间博客就写了11篇就提交了 内容不全面)其余 ...

额……膜拜……我昨天前天交的……扣了0.3……
回复 使用道具 举报
  1. package com.itheima;

  2. import java.lang.reflect.Field;

  3. /**
  4. * 第3题:写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
  5. *
  6. * public void setProperty(Object obj, String propertyName, Object value){
  7. *
  8. * }
  9. *
  10. * @author IBM
  11. *
  12. */

  13. /*
  14. * 思路:看题目就能明确是要求用反射的方法操作(File类)
  15. *
  16. * 1,创建一个测试类A 分别定义公共和私有的成员变量;
  17. *
  18. * 2,分别定义两个方法访问私有成员和公共成员变量
  19. *
  20. * 3,调用自定义方法测试
  21. *
  22. */

  23. public class Test3 {
  24.        
  25.         public static void main(String[] args) throws Exception {
  26.                
  27.                 //创建对象A
  28.                
  29.                 A obj = new A();
  30.                
  31.                 //将对象中的a变量赋值为3,默认的为0;
  32.                
  33.                 setProperty(obj,"a", 3 );
  34.                
  35.                 //打印a的值
  36.                
  37.                 System.out.println(obj.a);
  38.                
  39.                 //将对象中的s变量赋值为2,默认的为5;
  40.                
  41.                 setNotAccessibleProperty(obj,"b", 2 );
  42.                
  43.                 //打印a的值
  44.                
  45.                 System.out.println(obj.b);
  46.                
  47.         }
  48.        
  49.         //定义方法可以可将obj对象中名为propertyName的属性的值设置为value.
  50.        
  51.         //该方法不能访问私有成员
  52.         public static void setProperty(Object obj, String propertyName, Object value) throws Exception{
  53.                  
  54.                 //通过给定的类名称,加载对应的字节码文件,并封装成字节码文件对象Class
  55.                
  56.                 Class<?> clazz = obj.getClass();
  57.                
  58.                 Field field = clazz.getField(propertyName);//获取公共字段
  59.                
  60.                 field.set(obj, value);//设置字段为value
  61.                
  62.         }
  63.        
  64.         //定义方法可以可将obj对象中名为propertyName的属性的值设置为value.
  65.        
  66.         //该方法可以访问私有成员
  67.         public static void setNotAccessibleProperty(Object obj, String propertyName, Object value) throws Exception{
  68.                
  69.                 Class<?> clazz = obj.getClass();
  70.                
  71.                 Field field = clazz.getDeclaredField(propertyName);
  72.                
  73.                 //赋值强将该成员变量的访问权限打开
  74.                
  75.                 field.setAccessible(true);
  76.                
  77.                 field.set(obj, value);
  78.                
  79.                 //赋完值将该成员变量的访问权限关闭
  80.                
  81.                 field.setAccessible(false);
  82.                
  83.         }
  84.        
  85.        
  86.     //创建一个A类测试用,分别设置成员变量a和b的值(a为公共的,b为私有的)
  87.        
  88.         public static class A {
  89.                
  90.                 public int a= 0;
  91.                
  92.                 private int b = 5;
  93.                
  94.         }
  95.        
  96. }
复制代码
回复 使用道具 举报
现在 在为面试做准备的 前面70分 就博客被扣了0.4分(由于赶时间博客就写了11篇就提交了 内容不全面)其余都是满分。
回复 使用道具 举报
我提交了哈  满分
回复 使用道具 举报
姠佐メ亾佑つ 发表于 2014-10-14 18:34
楼主题目和我一样。。

估计一共也就没多少题……这道倒是不难……就是我自己出了点小错误……害我看了半天呀~~哎~~你的交了么?多少分啊?
回复 使用道具 举报
楼主题目和我一样。。
回复 使用道具 举报
额……自己解决了……是我的System.out.println写到主函数上了……
我的setProperty()执行完后弹栈,所以在主函数里打印没结果……
回复 使用道具 举报
没人能给看一下么?
回复 使用道具 举报
到底哪里遇到了问题?求大神帮忙看看~~谢了~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马