java-反射-getFields、getDeclaredFields

本文详细解析了Java反射中getFields与getDeclaredFields方法的使用及区别,通过实例展示了如何获取类的公共属性和所有属性,包括私有和保护属性,以及它们是否包含从父类继承的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

1.1.getFields:获取类的全部公共属性,包括继承来的(但是私有和保护的成员不在内)。

1.2.getDeclaredFields:获取类的全部属性(包括私有和保护的属性),不包括继承来的。

2.代码

package test;

import java.lang.reflect.Field;

public class FieldTest {

    public static void main(String[] args) {
	// TODO Auto-generated method stub
	FieldTest fieldTest = new FieldTest();
	fieldTest.main();
    }

    public void main() {
	System.out.println("getFields:获取对象的全部公共属性,包括继承来的");
	showFieldName();
	System.out.println("getDeclaredFields:获取对象的全部属性,不包括继承的");
	showDeclaredField();
    }
    public void showFieldName(){
	D d = new D();
	Field[] field = d.getClass().getFields();
	for (Field f : field) {
	    System.out.println(f.getName());
	}
    } 
    public void showDeclaredField(){
	D d = new D();
	CreateClass.create(d);
	//showDeclaredField(d.getClass());
    }
    public void showDeclaredField(Class<?> ca){
	Field[] field = ca.getDeclaredFields();
	for (Field f : field) {
	    System.out.println(f.getName());
	}
	if(ca.getSuperclass()!=null){
	    showDeclaredField(ca.getSuperclass());
	}
	
    }
   

    class A {
	public String ma;
    }

    class B extends A {
	protected String mb;
    }

    class C extends B {
	private String mc;
    }

    class D extends C {
	private String md2;
	public String md;
    }
}
class CreateClass{
    private Object obj;
    private CreateClass(Object o){
	this.obj = o;
    }
    static public void create(Object o){
	new CreateClass(o).showDeclaredField(o.getClass());
    }
    public void showDeclaredField(Class<?> ca){
	Field[] field = ca.getDeclaredFields();
	for (Field f : field) {
	    if(!"this$0".equals(f.getName())){
		System.out.println(f.getName());
	    }
	}
	if(ca.getSuperclass()!=null){
	    showDeclaredField(ca.getSuperclass());
	}
    }
}

3.运行结果

getFields:获取对象的全部公共属性,包括继承来的
md
ma
getDeclaredFields:获取对象的全部属性,不包括继承的
md2
md
mc
mb
ma

4.补记录

4.1 第二版代码

package test;

import java.lang.reflect.Field;

public class FieldTest {

    public static void main(String[] args) {
	// TODO Auto-generated method stub
	FieldTest fieldTest = new FieldTest();
	fieldTest.main();
    }

    public void main() {
	System.out.println("getFields:获取对象的全部公共属性,包括继承来的");
	showFieldName();
	System.out.println("getDeclaredFields:获取对象的全部属性,不包括继承的");
	showDeclaredField();
    }
    public void showFieldName(){
	D d = new D();
	Field[] field = d.getClass().getFields();
	for (Field f : field) {
	    System.out.println(f.getName());
	}
    } 
    public void showDeclaredField(){
	D d = new D();
	CreateClass.create(d);
	//showDeclaredField(d.getClass());
    }
    public void showDeclaredField(Class<?> ca){
	Field[] field = ca.getDeclaredFields();
	for (Field f : field) {
	    System.out.println(f.getName());
	}
	if(ca.getSuperclass()!=null){
	    showDeclaredField(ca.getSuperclass());
	}
	
    }
   

    class A {
	public String ma;
    }

    class B extends A {
	protected String mb;
    }

    class C extends B {
	private String mc;
    }

    class D extends C {
	private String md2;
	public String md;
    }
}
class CreateClass{
    private Object obj;
    private CreateClass(Object o){
	this.obj = o;
    }
    static public void create(Object o){
	new CreateClass(o).showDeclaredField(o.getClass());
    }
    public void showDeclaredField(Class<?> ca){
	Field[] field = ca.getDeclaredFields();
	for (Field f : field) {
	    if(!"this$0".equals(f.getName())){
		System.out.println(f.getName());
		try{
		    f.setAccessible(true);
		    f.set(this.obj,f.getName());
		}catch(Exception e){
		    System.out.println(e.toString());
		}
		
	    }
	}
	if(ca.getSuperclass()!=null){
	    showDeclaredField(ca.getSuperclass());
	}
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值