java Class getDeclaredFields() 與getFields()的區別


getFields()與getDeclaredFields()區別:getFields()只能訪問類中聲明爲公有的字段,私有的字段它無法訪問,能訪問從其它類繼承來的公有方法.getDeclaredFields()能訪問類中所有的字段,與public,private,protect無關,不能訪問從其它類繼承來的方法  


 getMethods()與getDeclaredMethods()區別:getMethods()只能訪問類中聲明爲公有的方法,私有的方法它無法訪問,能訪問從其它類繼承來的公有方法.getDeclaredFields()能訪問類中所有的字段,與public,private,protect無關,不能訪問從其它類繼承來的方法  

*

getConstructors()與getDeclaredConstructors()區別:getConstructors()只能訪問類中聲明爲public的構造函數.getDeclaredConstructors()能訪問類中所有的構造函數,與public,private,protect無關  


class Person2 implements China{
	
	private static String sex ;
	
	public static String length;
}

class Person2 implements China{
	
	private static String sex ;
	
	public static String length;
}

public class Reflect_Example_10 {
	public static void main(String[] args) {
		
		/*
		 *  getFields()與getDeclaredFields()區別:
		 *  getFields()只能訪問類中聲明爲公有的字段,私有的字段它無法訪問,能訪問從其它類繼承來的公有方法.
		 *  getDeclaredFields()能訪問類中所有的字段,與public,private,protect無關,不能訪問從其它類繼承來的方法 
		 */
		
		Class<?> demo = null;
		try {
			demo = Class.forName("com.reflect.Person2");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("====本類屬性,不包括實現的接口或者父類的屬性(public,protected,private)====");
		Field[] fields = demo.getDeclaredFields();
		for (Field field : fields) {
			int mod = field.getModifiers();
			String modifier = Modifier.toString(mod);
			Class<?> type = field.getType();
			String typeName = type.getName();
			String fieldName = field.getName();
			System.out.println("域:" + modifier + " " + typeName + " " + fieldName + ";");
		}
		
		System.out.println("====公有屬性,包括實現的接口或者父類的公有屬性(public)====");
		Field[] superFields = demo.getFields();
		for (Field field : superFields) {
			int mod = field.getModifiers();
			String modifier = Modifier.toString(mod);
			Class<?> type = field.getType();
			String typeName = type.getName();
			String fieldName = field.getName();
			System.out.println("域:" + modifier + " " + typeName + " " + fieldName + ";");
		}
		
	}
}

運行結果:

====本類屬性,不包括實現的接口或者父類的屬性(public,protected,private)====
域:private static java.lang.String sex;
域:public static java.lang.String length;
====公有屬性,包括實現的接口或者父類的公有屬性(public)====
域:public static java.lang.String length;
域:public static final java.lang.String name;
域:public static final int age;


原文:http://mxdxm.iteye.com/blog/927990



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章