從設計的原則來說,類的成員變量如果設計成private,那麼我們就不能在類外部去獲取到此private變量的值。通常的做法是提供此private變量的get 和set方法。但是如果這個類沒有提供get和set方法,我們如何去獲取到這個類的private成員變量呢?比如有這麼一個類 Person:
- class Person{
- private String name = "cross";
- }
我們如何不在這個類中來獲取到name的值呢?通過java的反射機制可以獲取的,注意這裏會對name這個field設置下field.setAccessible(true), 我們才能訪問private變量
- package com.withiter.test;
- import java.lang.reflect.Field;
- public class ReflectTest {
- public static void main(String[] args) {
- try {
- Class<?> obj = Class.forName("com.withiter.test.Person");
- Field[] f = obj.getDeclaredFields();
- for(Field field : f){
- field.setAccessible(true);
- System.out.println(field.getName()+":"+field.get(obj.newInstance()));
- }
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InstantiationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- class Person{
- private String name = "cross";
- }
來源:http://blog.csdn.net/withiter/article/details/8859399