反射获取字段注意点  
   
所属分类 java
浏览量 2014
getFields 获取 public 字段 (含超类)
getDeclaredFields 只能获取当前类定义的字段 ( private protected public)
反射获取方法类似
GrandFather.java
public class GrandFather{
	private static String privateStaticFieldGrandFather = "privateStaticFieldGrandFather-value";
	protected static String protectedStaticFieldGrandFather = "protectedStaticFieldGrandFather-value";
	public static String publicStaticFieldGrandFather = "publicStaticFieldGrandFather-value";
	
	private  String privateFieldGrandFather = "privateFieldGrandFather-value";
	protected  String protectedFieldGrandFather = "protectedFieldGrandFather-value";
	public  String publicFieldGrandFather = "publicFieldGrandFather-value";		
}
Father.java
public class Father extends GrandFather{
	private static String privateStaticFieldFather = "privateStaticFieldFather-value";
	protected static String protectedStaticFieldFather = "protectedStaticFieldFather-value";
	public static String publicStaticFieldFather = "publicStaticFieldFather-value";
	
	private  String privateFieldFather = "privateFieldFather-value";
	protected  String protectedFieldFather = "protectedFieldFather-value";
	public  String publicFieldFather = "publicFieldFather-value";	
}
Son.java
public class Son extends Father{
	private static String privateStaticField = "privateStaticField-value";
	protected static String protectedStaticField  = "protectedStaticField-value";
	public static String publicStaticField  = "publicStaticField-value";
	
	private  String privateField  = "privateField-value";
	protected  String protectedField  = "protectedField-value";
	public  String publicField  = "publicField-value";	
}
		System.out.println(Son.class.getSuperclass());
		System.out.println(Son.class.getSuperclass().getSuperclass());
		
		System.out.println();
		
		Field[] fields = Son.class.getFields();
		for(Field field:fields){
			System.out.println(field.getName());
		}
		System.out.println();
		
		fields = Son.class.getDeclaredFields();
		for (Field field : fields) {
			System.out.println(field.getName());
		}
		System.out.println();
		
		Son child = new Son();
		
		Field field = Son.class.getField("publicStaticField");
		System.out.println(field.get(null));
		
		field = Son.class.getField("publicStaticFieldFather");
		System.out.println(field.get(null));
		
		field = Son.class.getField("publicStaticFieldGrandFather");
		System.out.println(field.get(null));
		
		field = Son.class.getField("publicField");
		System.out.println(field.get(child));
		
		field = Son.class.getField("publicFieldFather");
		System.out.println(field.get(child));
		
		field = Son.class.getField("publicFieldGrandFather");
		System.out.println(field.get(child));
		
		System.out.println();
		
		field = Son.class.getDeclaredField("privateStaticField");
		field.setAccessible(true);
		System.out.println(field.get(null));
		
		field = Son.class.getDeclaredField("privateField");
		field.setAccessible(true);
		System.out.println(field.get(child));
		
class field.Father
class field.GrandFather
publicStaticField
publicField
publicStaticFieldFather
publicFieldFather
publicStaticFieldGrandFather
publicFieldGrandFather
privateStaticField
protectedStaticField
publicStaticField
privateField
protectedField
publicField
publicStaticField-value
publicStaticFieldFather-value
publicStaticFieldGrandFather-value
publicField-value
publicFieldFather-value
publicFieldGrandFather-value
privateStaticField-value
privateField-value
 上一篇  
   
 下一篇  
 eclipse异常断点设置 
 eclipse设置条件断点和异常断点 
 spring5属性及内嵌属性解析 
 这样的人你敢要吗 
 我们怎么了 
 做局与破局