package j2se_develop;
/**
* 反射类的基石-----Class类
* Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class
* Class:对应各个类在内存中的字节码
* 如何得到各个字节码对应的实例对象(Class类型)
* 1,类名.class,如:System.class;
* 2,对象.getClass();如:new Date().getClass();
* 3,Class.forName("类名"),如:Class.forName("java.util.Date");
* 九个预定义Class实例对象
* 1,八个基本数据类型(boolean,byte,char,short,int,long,folat,double)
* 2,void;如:Class cla1=void.class;
* 数组类型的Class实例对象
* Class.isArray();
*
* 总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如:int[],void等等
*
* @author wjw
*
*/
public class FanShe {
public static void main(String[] args)throws ClassNotFoundException {
Class c=void.class;
System.out.println(c);
method();
}
public static void method() throws ClassNotFoundException{
String str="aaaa";
Class cla1=str.getClass();
Class cla2=String.class;
Class cla3=Class.forName("java.lang.String");
System.out.println(cla1==cla2);//返回true,说明这几种方式产生的字节码文件都是同一个
System.out.println(cla1==cla3);//返回true,说明这几种方式产生的字节码文件都是同一个
System.out.println(cla2==cla3);//返回true,说明这几种方式产生的字节码文件都是同一个
System.out.println("---------------------------------------------------");
System.out.println(cla1.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.TYPE);//返回true;该Integer.TYPE封装了基本数据类型的字节码,所以一样
System.out.println(int[].class.isArray());//用isArray()判断
}
}