运行:
  [C value
  int hash
  long serialVersionUID
  [Ljava.io.ObjectStreamField; serialPersistentFields
  java.util.Comparator CASE_INSENSITIVE_ORDER
  int HASHING_SEED
  int hash32
  五、获取构造函数的信息
  public static void printConstructInfo(Object o){
  Class c=o.getClass();
  Constructor[] constructors=c.getDeclaredConstructors();
  for (Constructor con:constructors){
  System.out.print(con.getName()+”(“);
  Class[] typeParas=con.getParameterTypes();
  for (Class class1:typeParas){
  System.out.print(class1.getName()+” ,”);
  }
  System.out.println(“)”);
  }
  }
  public static void main(String[] args){
  String s="ss";
  //ClassUtil.printClassInfo(s);
  //ClassUtil.printFiledInfo(s);
  ClassUtil.printConstructInfo(s);
  }
  运行:
  java.lang.String([B ,)
  java.lang.String([B ,int ,int ,)
  java.lang.String([B ,java.nio.charset.Charset ,)
  java.lang.String([B ,java.lang.String ,)
  java.lang.String([B ,int ,int ,java.nio.charset.Charset ,)
  java.lang.String(int ,int ,[C ,)
  java.lang.String([C ,boolean ,)
  java.lang.String(java.lang.StringBuilder ,)
  java.lang.String(java.lang.StringBuffer ,)
  ...
  六、方法反射的操作
  获取一个方法:需要获取方法的名称和方法的参数才能决定一个方法。
  方法的反射操作:
  method.invoke(对象,参数列表);
  举个例子:
  class A{
  public void add(int a,int b){
  System.out.print(a+b);
  }
  public void toUpper(String a){
  System.out.print(a.toUpperCase());
  }
  }
  public static void main(String[] args) {
  A a=new A();
  Class c=a.getClass();
  try {
  Method method=c.getMethod("add",new Class[]{int.class,int.class});
  //也可以 Method method=c.getMethod("add",int.class,int.class);
  //方法的反射操作
  method.invoke(a,10,10);
  }catch (Exception e){
  e.printStackTrace();
  }
  }
  运行:
  20
  本篇文章已经讲解了java反射的基本用法, 它可以在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。