field 属性操作

首先必须明一点 Field类主要是用来辅助获取和操作类的属性的

1.怎么通过反射获取类的属性

先来看JDK提供的方法有如下几种:

a)Class.getDeclaredField(String name);

     返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段

     b)Class.getDeclaredFields();

      返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

    c)Class.getField(String name);

       返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段

    d)Class.getField();

返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

来一个例子来说明一下 :

实体类:

 1  import java.util.Date;
 2 /**
 3  * @ClassName: Student
 4  * @Description: 学生实体
 5  * @author JoseanLuo
 6  * @date 2014-3-18 下午5:17:35
 7  * @version V1.0
 8  */
 9 public class Student
10 {
11   private Long id;
12   private String name;
13   private Date createdate;
14   private String no;
15   public String nickname;
16 public Long getId()
17 {
18     return id;
19 }
20 public void setId(Long id)
21 {
22     this.id = id;
23 }
24 public String getName()
25 {
26     return name;
27 }
28 public void setName(String name)
29 {
30     this.name = name;
31 }
32 public Date getCreatedate()
33 {
34     return createdate;
35 }
36 public void setCreatedate(Date createdate)
37 {
38     this.createdate = createdate;
39 }
40 public String getNo()
41 {
42     return no;
43 }
44 public void setNo(String no)
45 {
46     this.no = no;
47 }
48 public String getNickname()
49 {
50     return nickname;
51 }
52 public void setNickname(String nickname)
53 {
54     this.nickname = nickname;
55 }
56
57 }

测试类:

 1 import java.lang.reflect.Field;
 2 import java.util.Date;
 3 /**
 4  * @ClassName: ReflectFieldTest
 5  * @Description: 反射Field测试。
 6  * @author JoseanLuo
 7  * @date 2014-3-18 下午5:16:17
 8  * @version V1.0
 9  */
10 public class ReflectFieldTest
11 {
12
13     public static void main(String[] args)
14 {    Student stu=new Student();
15      stu.setId(1L);
16      stu.setName("Josean");
17      stu.setNo("201403185203344");
18      stu.setCreatedate(new Date());
19      try
20     {
21         Field property1=stu.getClass().getDeclaredField("name");
22         System.out.println(property1);//private java.lang.String com.cx.test.Student.name
23         Field property3=stu.getClass().getField("nickname");
24         System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname
25         //错误方法 getField系列方法只能获取公共字段
26         //Field property2=stu.getClass().getField("name");
27         //System.out.println(property2);
28         //会抛java.lang.NoSuchFieldException
29
30
31     } catch (SecurityException e)
32     {
33
34         e.printStackTrace();
35     } catch (NoSuchFieldException e)
36     {
37
38         e.printStackTrace();
39     }
40 }
41
42
43 }

2.进行属性获取更改

   得到这个Field之后你就可以获取他的值或者设置他的值了。

   获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。

   值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。

   同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。

 

 1 import java.lang.reflect.Field;
 2 import java.util.Date;
 3 /**
 4  * @ClassName: ReflectFieldTest
 5  * @Description: 反射Field测试。
 6  * @author JoseanLuo
 7  * @date 2014-3-18 下午5:16:17
 8  * @version V1.0
 9  */
10 public class ReflectFieldTest
11 {
12
13     public static void main(String[] args) throws Exception
14 {    Student stu=new Student();
15      stu.setId(1L);
16      stu.setName("Josean");
17      stu.setNo("201403185203344");
18      stu.setCreatedate(new Date());
19      stu.setNickname("copyman");
20         Field property1=stu.getClass().getDeclaredField("name");
21         //System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name
22         Field property3=stu.getClass().getField("nickname");
23         System.out.println(property3.get(stu));
24         //System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname
25         //错误方法 getField系列方法只能获取公共字段
26         //Field property2=stu.getClass().getField("name");
27         //System.out.println(property2);
28         //会抛java.lang.NoSuchFieldException
29         Field [] prFields4=stu.getClass().getDeclaredFields();
30         for(Field field:prFields4)
31         {
32             System.out.println(field);
33             System.out.println(field.equals(property1));
34             //私有变量必须先设置Accessible为true
35             field.setAccessible(true);
36             //获取用get类方法。
37             System.out.println(field.get(stu));
38         }
39         //设置用set类方法
40         property3.set(stu, "名字被我改了,哈哈");
41
42         System.out.println(stu.getNickname());
43
44 }
45
46
47 }
 
时间: 2024-08-29 22:19:37

field 属性操作的相关文章

web前端【第四篇】CSS属性操作

一.文本属性 1.text-align:cnter 文本居中2.line heigth 垂直居中 :行高,和高度对应3.设置图片与文本的距离:vertical-align4.text-decoration:none 去掉超链接下划线5.要是给a标签修改颜色的时候,就定到a标签上,用继承有时候是搞不定的因为继承的级别是很低的,如果a标签设置了样式,是不会继承父亲的6.首行缩进:text-indent:30px7.font-style:oblique 或者italic....(设置字体的样式为斜体)

css样式之属性操作

css样式之属性操作 一.文本属性 1.text-align:cnter 文本居中 2.line heigth 垂直居中 :行高,和高度对应 3.设置图片与文本的距离:vertical-align 4.text-decoration:none 去掉超链接下划线 5.要是给a标签修改颜色的时候,就定到a标签上,用继承有时候是搞不定的 因为继承的级别是很低的,如果a标签设置了样式,是不会继承父亲的 6.首行缩进:text-indent:30px 7.font-style:oblique 或者ital

Day49:CSS属性操作(文本、背景、边框、列表、display、边距)

一.CSS属性操作 1.CSS text 文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如:  red p { color: rebeccapurple; } 水平对齐方式 text-align 属性规定元素中的文本的水平对齐方式. left       把文本排列到左边.默认值:由浏览器决定. right     把文本排列到右边. center 把文

js的HTML属性操作

<input type="button" id="btn1" value="按钮" /> HTML属性操作:读.写 属性名 属性值 属性都操作:获取.找到 元素.属性 <head> <meta charset="UTF-8"> <title>Title</title> <script> window.onload=function () { var oBt

JS的属性操作(2)

1.点击下拉框选择信息 2.点击按钮,下拉框内选择的信息会自动跳转到文本输入框 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML

JavaScript 属性操作

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML 的属性操作:读.写 10 属性名: 11 属性值: 12 13 读操作:获取.

09.11 jquery04 效果 基本 滑动滑出 淡入淡出 自定义动画 动画操作 工具 浏览器 对象和属性操作核心

# 效果 ### 基本 (width/height/opacity) * show() * hide() * toggle() ### 滑动滑出 (height) * slideUp()       隐藏 * slideDown()  显示 * slideToggle() ### 淡入淡出 * fadeOut()    隐藏 * fadeIn()      显示 * fadeToggle() * fadeTo() 不占用位置 消失之后后面的自动向上移动 ### 自定义动画 * animate(p

avalon2学习教程05属性操作

avalon2与avalon1的属性操作虽然都是使用ms-attr,但用法完全不一样. avalon1是这样操作属性的 其语法为 ms-attr-valueName="vmProp" 有多少个属性就写多个ms-attr-.其中不能省略.此外,还存在ms-title, ms-alt,ms-src, ms-href, ms-selected, ms-checked等等缩略写法.但估计很少人知道,到底哪些属性可以缩写,哪些不能. avalon2从减轻用户的记忆出发,将你要操作的属性全部打包成

js switch判断 三目运算 while 及 属性操作

三 目运算:如var a = 10: var b= 12: c = a>b ?a:b; 若成立执行a否则执行b var isHide = true; 若用if判断语句如下 if(isHide) { box.style.display = "block"; } else { box.style.display = "none"; } 三目运算替代if box.style.display = isHide?"block":"none&