黑马程序员技术交流社区

标题: 反射之Class [打印本页]

作者: Morgan    时间: 2015-7-4 11:45
标题: 反射之Class
本帖最后由 Morgan 于 2015-7-4 11:48 编辑

反射
1,反射不是jdk的新特性。从Java1.2就有了。框架包括Springstrushibernatejunit都要用到反射技术。




2,反射的主要使用类:Class。要注意class关键字是小写的,而现在Classc是大写的,代表一个类。代表了一类事物,就是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());//falseString不是基本数据类型。
System.out.println(int.class.isPrimitive());//trueint是基本数据类型
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