黑马程序员技术交流社区
标题: 反射之Class [打印本页]
作者: Morgan 时间: 2015-7-4 11:45
标题: 反射之Class
本帖最后由 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 ,...
作者: ZhangHeng 时间: 2015-7-4 15:31
谢谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |