本帖最后由 Morgan 于 2015-7-4 11:48 编辑
反射 1,反射不是jdk的新特性。从Java1.2就有了。框架包括Spring,strus,hibernate,junit都要用到反射技术。 2,反射的主要使用类:Class。要注意class关键字是小写的,而现在Class的c是大写的,代表一个类。代表了一类事物,就是Java程序中的各个Java类。通过Class对象就可以得到一个类身上的方方面面的信息。Class的实例对象代表内存中的一份字节码。用到类的时候类的字节码就被加载到内存中。 产生类对象的第一方法: Class cls1 = Date.class;// 通过类的静态类变量得到。 产生类对象的第二方法: Date d=new Date(); Class clazz = d.getClass();//通过类的对象调用getClass方法得到类的对象。 产生类对象的第三方法: Class clazz = Class.forName("java.lang.String");//用Class的静态方法forName()得到类的字节码。如果已经被加载就直接得到对象,如果类还没有被加载就加载它。在各种方法使用较多。因为类名可以作为变量。 3.八个基本数据类型加上Void,他们都有对应的Class对象。比如 Class cls = void.class; String str1 ="abc"; Class cls1= str1.getClass(); Class cls2 = String.class; Class cls3 = Class.forName("java.lang.String"); System.out.println(cls1==cls2);//true。不管怎么得到字节码文件只有一份。 System.out.println(cls1==cls3);//true 4.Class的成员方法isPrimitive(): 判定指定的 Class 对象是否表示一个基本类型。 System.out.println(cls1.isPrimitive());//false。String不是基本数据类型。 System.out.println(int.class.isPrimitive());//true。int是基本数据类型 System.out.println(int.class= =Integer.class);//false。不是同一个类型。 System.out.println(int.class = =Integer.YYPE);//true。 System.out.println(int[].class.isPrimitive());//false。
5. isArray() : 判定此 Class 对象是否表示一个数组类。 System.out.println(int[].class.isArray());//true。 总之只要在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void ,...
|