1、Class类的使用java
1 Class c1 =int.class;//int的类类型
2 Class c2 =String.class;//String类的类类型,能够理解为编译生成的那个String.class字节码文件, 3 //固然,这并非官方的说法
4 Class c3 =double.class; 5 Class c4 =Double.class; 6 Class c5 =void.class;
1 /**
2 * 打印类的信息,包括类的成员函数,成员变量 3 * @param obj 该对象所属类的信息 4 */
5 publicstaticvoid printClassMessage(Object obj){ 6 //要获取类的信息,首先要获取类的类类型
7 Class c = obj.getClass();//传递的是哪一个子类的对象,c就是该子类的类类型 8 //获取类的名称
9 System.out.println("累的名称是:"+c.getName()); 10
11 /*
12 * Method类,方法的对象 13 * 一个成员方法就是一个Method对象 14 * getMethods()方法获取的是全部的public的函数,包括父类继承而来的 15 * getDeclaredMethods()获取的是多有该类本身声明的方法,不问访问权限 16 */
17 Method[] ms = c.getMethods();//c.getDeclaredMethods();
18 for(int i =0; i < ms.length; i++){ 19 //获得方法的返回值类型的类类型
20 Class retrunType = ms[i].getReturnType(); 21 System.out.print(retrunType.getName()+" "); 22 //获得方法的名称
23 System.out.print(ms[i].getName()+"("); 24 //获取的参数类型--->获得的是参数列表的类型的类类型
25 Class[] paraTypes = ms[i].getParameterTypes(); 26 for(Class class1 : paraTypes){ 27 System.out.print(class1.getName()+","); 28 } 29 System.out.println(")"); 30 } 31 }
Class的API中还有不少其余的方法,能够获得interface、Package、Annotation等不少信息,具体使用请参考帮助手册,本文就不在详细讲解。特别注意的一点是,若是你想获得一个类的信息,首先就要获取该类的类类型。
框架
1 /**
2 * 成员变量也是对象,是java.lang.reflect.Field这个类的的对象 3 * Field类封装了关于成员变量的操做 4 * getFields()方法获取的是全部public的成员变量的信息 5 * getDeclareFields()方法获取的是该类本身声明的成员变量的信息 6 */
7 Field[] fs = c.getDeclaredFields(); 8 for(Field field : fs){ 9 //获得成员变量的类型的类类型
10 Class fieldType = field.getType(); 11 String typeName = fieldType.getName(); 12 //获得成员变量的名称
13 String fieldName = field.getName(); 14 System.out.print(typeName+" "+fieldName); 15 } 16
17
18 /**
19 * 构造函数也是对象 20 * java.lang.Constructor中封装了构造函数的信息 21 * getConstructor()方法获取全部的public的构造函数 22 * getDeclaredConstructors获得全部的构造函数 23 */
24 Constructor[] cs = c.getDeclaredConstructors(); 25 for(Constructor constructor : cs){ 26 System.out.print(constructor.getName()+"("); 27 //获取构造函数的参数列表---》获得的是参数雷彪的类类型
28 Class[] paramTypes = constructor.getParameterTypes(); 29 for(Class class1 : paramTypes){ 30 System.out.print(class1.getName()+","); 31 } 32 System.out.println(")"); 33 }
5、方法反射的基本操做函数
1 ArrayList list1 =newArrayList(); 2 ArrayList<String> list2 =newArrayList<String>(); 3
4 Class c1 = list1.getClass(); 5 Class c2 = list2.getClass(); 6
7 System.out.println(c1==c2);//结果为true,为何??