美文网首页程序员
Java反射机制中getFields和getDeclareFie

Java反射机制中getFields和getDeclareFie

作者: 大侠陈 | 来源:发表于2018-10-19 13:36 被阅读191次

在java反射机制中,代表java类型的Class<?>对象有两个获得类字段的方法getFields和getDeclareFields,这两个方法的区别如下

getFields方法

返回一个Field类型数组,其中包含当前类的public字段,如果此类继承于某个父类,同事包括父类的public字段。其它的proteced和private字段,无论是属于当前类还是父类都不被此方法获取。

getDeclareFields方法

返回一个Field类型数组,结果包含当前类的所有字段,private、protected、public或者无修饰符都在内。另外,此方法返回的结果不包括父类的任何字段。 此方法只是针对当前类的。

代码示例

public class MainSuper {
    public int publicField;
    protected long protecedField;
    private String privateField;
    public static int staticPublicField;
    protected static long staticProtectedField;
    private static String staticPrivateField;
}
public class Main extends MainSuper {

    public int publicField;
    protected long protectedField;
    private String privateField;

    public static int staticPublicField;
    protected static long staticProtectedField;
    private static String staticPrivateField;

    public static void main(String[] args) {
        System.out.println("getFields方法");
        System.out.println("..................................................");
        printFields(Main.class.getFields());
        System.out.println("--------------------------------------------------");
        System.out.println("getDeclaredFields");
        System.out.println("..................................................");
        printFields(Main.class.getDeclaredFields());
    }

    private static void printFields( Field[] fields ) {
        for(Field field : fields) {
            System.out.println(field);
        }
    }
}

执行结果如下

getFields方法
..................................................
public int Main.publicField
public static int Main.staticPublicField
public int MainSuper.publicField
public static int MainSuper.staticPublicField
--------------------------------------------------
getDeclaredFields
..................................................
public int Main.publicField
protected long Main.protectedField
private java.lang.String Main.privateField
public static int Main.staticPublicField
protected static long Main.staticProtectedField
private static java.lang.String Main.staticPrivateField

相似的方法

与获得字段的方法对应,获得方法、内部类、构造方法也有对应的方法

getMethods
getDeclaredMethods

getClasses
getDeclaredClasses

getConstructors
getDeclaredConstructors

访问私有成员

当我们通过 getDeclaredXXX 系列方法获得私有成员时,默认是无法访问的,强行访问会报类似的错误

java.lang.IllegalAccessException: Class client.Debugger can not access a member of class client.ClientServer with modifiers "private static final"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)

要使私有成员能访问,进行如下调用即可

field.setAccessible(true);

相关文章

  • Java反射机制中getFields和getDeclareFie

    在java反射机制中,代表java类型的Class对象有两个获得类字段的方法getFields和getDec...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • Java遍历对象的属性和值

    在Java类中,我们可以使用反射中的getDeclaredFields()或者getFields()方法来获取属性...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射机制基础

    一、反射 1、反射机制 反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 浅析java的反射机制

    反射 一、Java的反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对...

  • 反射及动态代理模式

    Java反射机制 Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法...

网友评论

    本文标题:Java反射机制中getFields和getDeclareFie

    本文链接:https://www.haomeiwen.com/subject/tkmyzftx.html