首先有这样一个类
public class test
{
  private String a;
  private String b;
  public String getA() {
    return a;
  }
  public void setA(String a) {
    this.a = a;
  }
  public String getB() {
    return b;
  }
  public void setB(String b) {
    this.b = b;
  }
  }
如果我在不知道类有什么属性的情况下,从程序中怎么动态列出test的所有属性(a和b),并取出a和b的值呢?请问能实现么?对jdk版本有要求么?

解决方案 »

  1.   

    利用反射機制可以實現該功能
    Class c = Class.forName(args[0]);
    Method m[] = c.getDeclaredMethods();
    for (int i = 0; i < m.length; i++)
        System.out.println(m[i].toString());
    }Java类反射中的主要方法对于以下三类组件中的任何一类来说 -- 构造函数、字段和方法 -- java.lang.Class 提供四种独立的反射调用,以不同的方式来获得信息。调用都遵循一种标准格式。以下是用于查找构造函数的一组反射调用:
    Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,
    Constructor[] getConstructors() -- 获得类的所有公共构造函数
    Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)
    Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关) 获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用,在参数类型数组中使用了字段名:
    Field getField(String name) -- 获得命名的公共字段
    Field[] getFields() -- 获得类的所有公共字段
    Field getDeclaredField(String name) -- 获得类声明的命名的字段
    Field[] getDeclaredFields() -- 获得类声明的所有字段 
    用于获得方法信息函数:
    Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法
    Method[] getMethods() -- 获得类的所有公共方法
    Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法
    Method[] getDeclaredMethods() -- 获得类声明的所有方法 
      

  2.   

    楼上正解,我在想,所有的IDE是不是也是这么做的呢?
      

  3.   

    如果用ide楼主的要求应该很容易实现