import java.lang.reflect.Field;
public class TestParam {
  public String name="hzhou";
  public TestParam() {
  }
  public static void main(String[] arg){
    try {
      Class cl = Class.forName("TestParam");
      Field[] fls=cl.getDeclaredFields();
      for(int i=0;i<fls.length;i++){
        System.out.println(fls[i].getName());
      }
    }
    catch (ClassNotFoundException ex) {
      System.out.println(ex.getMessage());
    }    
  }
}为什么输出显示只有 TestParam
而不是象jdk说的那样可以把所有public,private的field都显示出来?

解决方案 »

  1.   

    有没有用到包package?
    -----------------------
    package csdn.reflect;import java.lang.reflect.*;public class TestParam {
        public String name = "hzhou";    public TestParam() {
        }    public static void main(String[] arg) {
            try {
                Class cl = Class.forName("csdn.reflect.TestParam");
                Field[] fls = cl.getDeclaredFields();
                for (int i = 0; i < fls.length; i++) {
                    System.out.println(fls[i].getName() );
                }
                Method[] m = cl.getMethods();
                for (int i = 0; m != null && i < m.length; i++) {
                    System.out.println(m[i]);
                }
            } catch (ClassNotFoundException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
      

  2.   

    因为你只是getName()
    并没有输出public这些呀
      

  3.   

    private void printFields() {
        Field[] fields = c1.getDeclaredFields();
        
        for(int i = 0 ; i < fields.length ; i++) {
          Field f = fields[i];
          Class type = f.getType();
          String name = f.getName();
          jta.append("\t" + Modifier.toString(f.getModifiers()));
          jta.append("   " + type.getName() + " " + name + ";\n");
        }
      }