JavaDemo——反射中的getDeclaredXxxxxs()与getXxxxxs()区别

本文深入探讨Java反射API的使用,详细解析如何通过反射获取类的构造方法、字段和方法,包括public、默认、protected和private的成员。通过具体示例,展示了getDeclaredConstructors()、getConstructors()、getDeclaredFields()、getFields()、getDeclaredMethods()和getMethods()等方法的区别及应用。

获得构造方法:

getDeclaredConstructors():获得类的所有构造方法。(public,默认包,protected,private)

getConstructors():获得类的public构造方法。

获得字段:

getDeclaredFields():获得类的所有字段,不包括父类

getFields():获得类的public字段,包括父类。

获得方法:

getDeclaredMethods():获得类和实现的接口的所有方法,不包括父类

getMethods():获得类和实现的接口的public方法,包括父类。

 

测试demo:

/**
 * 2018年10月30日下午4:29:45
 */
package testreflect;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author XWF
 *
 */
public class TestAboutDeclared {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Class<Clss> cls = Clss.class;
		Constructor[] cons = cls.getDeclaredConstructors();
		show(cons);
		Constructor[] cons2 = cls.getConstructors();
		show(cons2);
		System.out.println("=============");
		Field[] fields2 = cls.getDeclaredFields();
		show(fields2);
		Field[] fields = cls.getFields();
		show(fields);
		System.out.println("=============");
		Method[] ms = cls.getDeclaredMethods();
		show(ms);
		Method[] ms2 = cls.getMethods();
		show(ms2);
	}
	
	public static <T> void show(T[] ts) {
		System.out.println("\t>len="+ts.length);
		for(T t:ts) {
			System.out.println(t);
		}
	}

}
interface IClss{
	public void i_hello();
	void i_world();
}
class Fcls{
	public int f_i = 1;
	String f_s = "ffff";
	public void f_fun() {
	}
	String f_gets() {
		return f_s;
	}
}
class Clss extends Fcls implements IClss{
	public int i = 12;
	String s = "hello";
	protected float f = 12.3f;
	private double d = 123.321;
	public Clss(int x){
		System.out.println("x"+x);
	}
	Clss(){
		System.out.println("构造方法。");
	}
	protected Clss(String s){
		System.out.println("s="+s);
	}
	private Clss(double d) {
		System.out.println("d="+d);
	}
	public void show() {
		System.out.println("show:"+this);
	}
	int getint() {
		return i;
	}
	protected String getStr() {
		return s;
	}
	private double getd() {
		return d;
	}
	@Override
	public void i_hello() {
	}
	@Override
	public void i_world() {
	}
}

结果:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值