java field获取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java field获取值相关的知识,希望对你有一定的参考价值。

参考技术A 很多朋友都想知道java field怎么获取值?下面就一起来了解一下吧~

定义
public Object get(Object obj)
1. 如果字段不是静态字段的话,要传入反射类的对象.如果传null是会报java.lang.NullPointerException 

2. 如果字段是静态字段的话,传入任何对象都是可以的,包括null 

例子

1. 获取属性的值
public static void main(String[] args) throws Exception      //使用反射第一步:获取操作类FieldDemo所对应的Class对象     Class cls = Class.forName("com.testReflect.FieldDemo");     //使用FieldDemo类的class对象生成 实例     Object obj = cls.newInstance();     //通过Class类中getField(String name): 获取类特定的方法,name参数指定了属性的名称     Field field = cls.getField("num1");     //拿到了Field类的实例后就可以调用其中的方法了     //方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值     System.out.println("属性值:  " + field.get(obj));     //方法: set(Object obj, Object value)  将指定对象变量上此 Field 对象表示的字段设置为指定的新值     field.set(obj, 55);     System.out.println("修改属性值后 --> get(Object obj):  " + field.get(obj));
2. get()传值
class A         int fild=3;       static int staticFild=4;     public class FiledTest          public static void main(String[] args) throws Exception                  Field field=A.class.getDeclaredField("fild");           int a= (Integer)field.get(new A()) ;   //        int c= (Integer)field.get(null) ; //不是静态字段不能传null           System.out.println(a);              Field staticfield=A.class.getDeclaredField("staticFild");           int b= (Integer)staticfield.get("") ;           int d= (Integer)staticfield.get(null) ;           System.out.println(b);           System.out.println(d);         
运行结果: 3  4  4

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。   转载https://my.oschina.net/u/1407116/blog/209383
摘要
java.lang.reflect.Field使用 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 对象所表示的类或接口的所有可访问公共字段

    来一个例子来说明一下 :

   实体类:

 import java.util.Date;
/**
 * @ClassName: Student
 * @Description: 学生实体  
 * @version V1.0 
 */
public class Student
{
  private Long id;
  private String name;
  private Date createdate;
  private String no;
  public String nickname;
public Long getId()
{
    return id;
}
public void setId(Long id)
{
    this.id = id;
}
public String getName()
{
    return name;
}
public void setName(String name)
{
    this.name = name;
}
public Date getCreatedate()
{
    return createdate;
}
public void setCreatedate(Date createdate)
{
    this.createdate = createdate;
}
public String getNo()
{
    return no;
}
public void setNo(String no)
{
    this.no = no;
}
public String getNickname()
{
    return nickname;
}
public void setNickname(String nickname)
{
    this.nickname = nickname;
}
  
}

     测试类:

import java.lang.reflect.Field;
import java.util.Date;
/**
 * @ClassName: ReflectFieldTest
 * @Description: 反射Field测试。
 * @author JoseanLuo  
 * @date 2014-3-18 下午5:16:17
 * @version V1.0 
 */
public class ReflectFieldTest
{
 
    public static void main(String[] args)
{    Student stu=new Student();
     stu.setId(1L);
     stu.setName("Josean");
     stu.setNo("201403185203344");
     stu.setCreatedate(new Date());
     try
    {
        Field property1=stu.getClass().getDeclaredField("name");
        System.out.println(property1);//private java.lang.String com.cx.test.Student.name
        Field property3=stu.getClass().getField("nickname");
        System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname
        //错误方法 getField系列方法只能获取公共字段
        //Field property2=stu.getClass().getField("name");
        //System.out.println(property2);
        //会抛java.lang.NoSuchFieldException
        
        
    } catch (SecurityException e)
    {
        
        e.printStackTrace();
    } catch (NoSuchFieldException e)
    {
        
        e.printStackTrace();
    }
}
    
    
}

  

2.进行属性获取更改

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

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

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

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

 

import java.lang.reflect.Field;
import java.util.Date;
/**
 * @ClassName: ReflectFieldTest
 * @Description: 反射Field测试。
 * @version V2.0
 */
public class ReflectFieldTest
{
 
    public static void main(String[] args) throws Exception
{    Student stu=new Student();
     stu.setId(1L);
     stu.setName("Josean");
     stu.setNo("201403185203344");
     stu.setCreatedate(new Date());
     stu.setNickname("copyman");
        Field property1=stu.getClass().getDeclaredField("name");
        //System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name
        Field property3=stu.getClass().getField("nickname");
        System.out.println(property3.get(stu));
        //System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname
        //错误方法 getField系列方法只能获取公共字段
        //Field property2=stu.getClass().getField("name");
        //System.out.println(property2);
        //会抛java.lang.NoSuchFieldException
        Field [] prFields4=stu.getClass().getDeclaredFields();
        for(Field field:prFields4)
        {
            System.out.println(field);
            System.out.println(field.equals(property1));
            //私有变量必须先设置Accessible为true
            field.setAccessible(true);
            //获取用get类方法。
            System.out.println(field.get(stu));
        }
        //设置用set类方法
        property3.set(stu, "名字被我改了,哈哈");
         
        System.out.println(stu.getNickname());
        
}
    
    
}

这个是控制台输出:

copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
名字被我改了,哈哈

以上是关于java field获取值的主要内容,如果未能解决你的问题,请参考以下文章

java反射获取属性值

如何反射取得一个对象中所有字段的值

Java反射获取字段值[重复]

java中遍历实体类,获取属性名和属性值

java 使用反射获取属性名,和值

java 使用反射获取属性名,和值