Java Field[] Field理解

来源:互联网 发布:快递怎么延长收货 淘宝 编辑:程序博客网 时间:2024/06/04 17:40

以下只是了解Field的用法,以下代码参考的点击打开链接

java 中getDeclaredFields() 与getFields() 的区别

getDeclaredFields()返回Class中所有的字段,包括私有字段。例证:

java代码

package com.test.bean;    import java.sql.Timestamp;    public class Person2 {      private int id;      private int age;      private String personName;      private Timestamp birthdate;      public String identitify;      protected String address;      String phone;        }  @Test      public void test_getDeclaredFields() {          Field[]fields=Person2.class.getDeclaredFields();          for (int i = 0; i < fields.length; i++) {              Field field = fields[i];              System.out.println(field.getName());          }      }  

运行结果:

id

age

personName

birthdate

identitify

address

phone

getFields  只返回公共字段,即有public修饰的字段。例证:

public void test_getDeclaredFields() {          Field[]fields=Person2.class.getFields();          for (int i = 0; i < fields.length; i++) {              Field field = fields[i];              System.out.println(field.getName());          }      }  

运行结果如下:

identitify

 

总结:

(1)getDeclaredFields()返回Class中所有的字段,包括私有字段;

(2)getFields  只返回公共字段,即有public修饰的字段


Field.setAccessible()方法的用法

 java代码中,常常将一个类的成员变量置为private

 在类的外面获取此类的私有成员变量的value时,需要设置setAccessible方法

 例如:

 这是一个外部类User

public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

                Class clazz = null;User user = new User();user.setId(11);user.setName("ruin");try {clazz = Class.forName("com.xyz.User");for(Field field:clazz.getDeclaredFields()){field.setAccessible(true);System.out.println(field.get(user));}} catch (Exception e) {e.printStackTrace();}

运行结果是

11

ruin

如果去掉这个方法

                Class clazz = null;User user = new User();user.setId(11);user.setName("ruin");try {clazz = Class.forName("com.xyz.User");for(Field field:clazz.getDeclaredFields()){//field.setAccessible(true);System.out.println(field.get(user));}} catch (Exception e) {e.printStackTrace();}

运行结果是

Class com.xyz.Test can not access a member of class com.xyz.User with modifiers "private"










0 0
原创粉丝点击