`

Java反射 getField和getDeclaredField区别

 
阅读更多

getField获得类中指定的public属性;getDeclaredField返回指定类中指定的属性(任何可见性)。看下面一个简单的例子:

Java代码  收藏代码
  1. package com;    
  2.     
  3. import java.lang.reflect.Field;    
  4. import java.util.*;    
  5.     
  6. public class MyUtil {    
  7.     
  8.     public static void main(String[] args) {    
  9.        testFields();    
  10.     }    
  11.         
  12.     public static void testFields() {    
  13.         try {    
  14.             System.out.println("Declared fields: ");    
  15.             Field[] fields = Dog.class.getDeclaredFields();    
  16.             for(int i = 0; i < fields.length; i++) {    
  17.                 System.out.println(fields[i].getName()); // 此处结果是color, name, type, fur    
  18.             }    
  19.                 
  20.             System.out.println("Public fields: ");    
  21.             fields = Dog.class.getFields();    
  22.             for(int i = 0; i < fields.length; i++) {    
  23.                 System.out.println(fields[i].getName()); // 此处结果是color, location    
  24.             }    
  25.     
  26.             Dog dog = new Dog();    
  27.             dog.setAge(1);    
  28.             Method method = dog.getClass().getMethod("getAge"null);    
  29.             Object value = method.invoke(dog);    
  30.             System.out.println(value); // 此处结果是1    
  31.         } catch (Exception e) {    
  32.             e.printStackTrace();    
  33.         }    
  34.     }    
  35.     
  36. }    
  37.     
  38. class Dog extends Animal {    
  39.     public int color;    
  40.     protected int name;    
  41.     private int type;    
  42.     int fur;    
  43. }    
  44.     
  45. class Animal {    
  46.     public int location;    
  47.     protected int age;    
  48.     private int height;    
  49.     int length;     
  50.     
  51.     public int getAge() {    
  52.         return age;    
  53.     }    
  54.     
  55.     public void setAge(int age) {    
  56.         this.age = age;    
  57.     }    
  58. }    

 可见,getDeclaredField可以获得类中任何可见性的属性不包括基类,而getField只能获得public属性包括基类的public属性。如果需要获取基类某个非public属性的值,则只能通过反射来调用方法了,从上述code可以看到。注意,getField只能得到public方法。

分享到:
评论

相关推荐

    Java 反射(Reflection) 经典实用例子

    Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射。反射机制是如今很多流行框架的实现基础,其中包括Spring、Hibernate等。原理性的问题不是本文的重点,接下来让我们在实例中...

    java 反射机制

    在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现。 java 反射机制,包括getclass ,getfield 等等

    java反射android的r文件的示例

    动态取得R文件的int值,通过string-array name属性动态获取R.array.xxx的int值 代码如下://通过string-array name属性动态获取R.array.xxx的int值public ... Field intField = arrayClass.getField(name); int

    ThinkPHP之getField详解

    getField方法是ThinkPHP中用来获取字段值的方法,区别于select和find方法,通常仅用于获取个别字段的值。但是事实上并没有那么简单,现将该方法的用法总结如下: 1.获取某个字段值 这个是getField方法最基本的用法,...

    01:详解C#中的反射.pdf

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个...

    个人java总结笔记

    Class 对象由Java虚拟机在使用到该类的时候,自动创建; Class 对象的三种获取方式: 1: Class.forName(“全类名”); 2:类对象名.getClass(); 3:类名.Class(); 通过Class 对象获得类的指定成员,构造方法 构造方法...

    Java高级特性之反射是什么?

    对象.getClass()(二)获取成员变量1.Field[] getFields()2.Field getField(String name)3.Field[] getDeclaredFields()4.Field getDeclaredField(String name)5.Field:成员变量5.1.获取值5.2.设置值(三)获取构造...

    javadbfjar.zip

    java操作dbf文件读写用的jar包。1.9版本。例子: package dbf; import java.io.FileInputStream; import java.io.InputStream; import com.linuxense.javadbf.DBFField; import com.linuxense.javadbf.DBFReader; ...

    实现new, getfield, putfield指令

    NULL 博文链接:https://simpleman7210.iteye.com/blog/1951523

    Java基础-day15每日作业卷1

    操作步骤描述(参考讲义1.8)训练案例10训练描述:【讲义--1.9字段(成员变量)与数据操作】一、使用反射机制获取一个类的属性,下列关于getField()方

    JDK_API_1_6

    ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。 ObjectOutputStream.PutField 提供对要写入 ObjectOutput 的持久字段的编程访问。 ObjectStreamClass 类的序列化...

    关于操作反射的部分代码

    //显示某对象的某方法和某属性 show(a,"show"); } //对未知类型的对象操作 public static void show(Object obj,String method_name)throws Exception{ Class c=obj.getClass(); Field field=c.getField...

    C#利用反射技术实现去掉按钮选中时的边框效果

    本文实例讲述了C#利用反射技术实现去掉按钮选中时的边框效果。分享给大家供大家参考。具体如下: public void HideFocusCues(Control control) { Type vType = typeof(Control); FieldInfo vFieldInfo = vType....

    thinkPHP数据查询常用方法总结【select,find,getField,query】

    主要介绍了thinkPHP数据查询常用方法,结合实例形式总结分析了select,find,getField,query等方法进行数据库查询操作的具体操作步骤与相关实现技巧,需要的朋友可以参考下

    C#引用访问权限分析

    本文实例分析了C#引用访问权限问题。分享给大家供大家参考...C#和Java代码及运行结果如下 代码如下:class Super {  public int field = 0;    public int getField()  {  return field;  } } class Sub : Super

    LightJson:用于将 JSON 数据编组\解组为 Java 类的库。 以轻量级 KISS 风格编写

    LightJson 是一个简单的轻量级 Java 库,用于处理 JSON,其设计轻巧、快速、简单且易于使用。使用 LightJson1.定义一个bean @JsonObjectpublic class Bean {@JsonFieldprivate Field field;public Field getField ()...

    BPEL介绍BPEL介绍BPEL介绍

    BPEL介绍BPEL介绍BPEL介绍BPEL介绍BPEL介绍BPEL介绍

    Android渠道打包工具packer-ng-plugin.zip

    }读取APK文件,由于这个库 packer-helper 需要同时给Gradle插件和Android项目使用,所以不能添加Android相关的依赖,但是又需要读取自身APK文件的路径,使用反射实现:// for android code private static ...

Global site tag (gtag.js) - Google Analytics