Java反射机制之成员变量的反射

通过反射机制获取某个对象的私有属性和共有属性,对于私有属性我们应该使用暴力反射获取对应的属性值:field.setAccessible(true);


public class FieldReflectTest {

	
	public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {

		User user = new User(1, "习近平");
		/*获取User类的字节码然后获取uname对应的属性*/
		Field uname = user.getClass().getField("uname");
		/*uid不是对象身上的变量而是类上的变量(它是通过类的字节码获取的),所以要通过file.get(obj)转换成对象上的变量*/
		String name = (String) uname.get(user);
		/*输出*/
		System.out.println(name);
		
		/*上面的代码我们获取类共有的属性,那么如何获取私有的属性呢?应该使用暴力反射来获取私有属性*/
		Field uid = user.getClass().getDeclaredField("uid");
		/*暴力反射使得私有属性可以被访问*/
		uid.setAccessible(true);
		/*获取对象上的变量*/
		int id = (int) uid.get(user);
		/*输出*/
		System.out.println(id);
	}

}


你可能感兴趣的:(类,reflect,反射机制,成员变量的反射)