简单地学习了一下Java的反射机制和Class类,我们就可以通过这种方式来获取一个类的详细信息。
1.获得基本数据类型和简单的类的类类型
1 public static void main(String[] args) { 2 Class c1 = int.class; // 拿到int的类类型 -- 相当于是int字节码 3 Class c2 = Integer.class; //Integer的类类型--与上面的int是不一样的 4 Class c3 = Void.class; 5 System.out.println(c1.getName()); 6 System.out.println(c2.getName()); //取得类的完整名称 7 System.out.println(c2.getSimpleName()); //取得简单的类名 8 9 }
2.打印类的信息--成员函数
/** * 打印类的信息,包括类的成员函数、成员变量 * * @param obj */ public static void printClassMessage(Object obj) { Class c1 = obj.getClass(); // 获取该类的类类型,如果该类是Object的话,表示是Object的类类型,否则是Obejct子类的类类型 System.out.println(c1.getName()); //获得该类的类名 /** * 万事万物结尾对象,所以在类中,一个方法也是对象,是Method的对象 * getMethods获取的是所有的public方法,包括从父类继承过来的方法 * getDeclaredMethods 获取的是自己声明的方法,不论是什么访问权限 */ Method []method = c1.getMethods(); for(int i = 0, n = method.length; i< n; i++) { //得到的是方法返回值类型的类类型--比如String,则得到的是String.class Class type = method[i].getReturnType(); System.out.print(type.getSimpleName()+" "); //打印方法的名字 System.out.print(method[i].getName() + "("); //获取参数列表的类类型 Class [] methodParameterTypes = method[i].getParameterTypes(); for(int j = 0, m = methodParameterTypes.length; j < m; j++) { System.out.print(methodParameterTypes[j].getSimpleName() + " "); } System.out.println(")"); } }
3.获取构造方法的信息
1 /** 2 * 构造方法也是对象, 是Java.lang.reflect.Constructor的对象 3 * getConstructors获得所有的public构造方法 4 * getDeclaredConstructors获得所有的构造方法 5 */ 6 Constructor[] declaredConstructors = c1.getDeclaredConstructors(); 7 for(int i = 0, n = declaredConstructors.length; i < n; i++) 8 { 9 System.out.print(declaredConstructors[i].getName() + "("); 10 Class ParameterTypes[] = declaredConstructors[i].getParameterTypes(); 11 for(int j = 0, m = ParameterTypes.length; j < m; j++) 12 { 13 System.out.print(ParameterTypes[j].getName() + " "); 14 } 15 System.out.println(")"); 16 }
时间: 2024-10-27 02:50:40