反射的基石--Class

2014-11-24 03:14:02 · 作者: · 浏览: 0

1.Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。

2.Class类的实例对象代表内存里的一份字节码,字节码-->如Person类,先用二进制数表示Person类,也就是

字节码,然后再将这个字节码加载到内存中去,最后用这个字节码创建实例对象。每一个类都有一个字节码

3.得到一个类的字节码有三种:

a ---- 类名.class,如System.class

b ---- 对象.getClass(),例如new Person().getClass();

c ----- Class.forName("类名")此方法是Class类的静态方法,返回字节码,返回方式有两种:

I这个类的字节码被加载过,已存在于Java虚拟机里(内存里),直接返回;

II这个类还没有被Java虚拟机加载过,先用类加载器去加载,把加载进来的字节码缓存在Java虚拟机里。

例如Class.forName("java.lang.Date") 应写完整类名,不能只写Date

4.九个预定义Class实例对象

boolean, byte, char, short, int, long, float,double and void

5代码:www.2cto.com

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(cls2 == cls3);//返回true

System.out.println(cls1.isPrimitive());

//返回false 判断是否是基本数据类型

System.out.println(int.class.isPrimitive());//返回true

System.out.println(int.class == Integer.class);//返回false

System.out.println(int.class == Integer.TYPE);//返回true

System.out.println(boolean.class == Boolean.TYPE);//返回true

System.out.println(char.class == Character.TYPE);//返回true

System.out.println(byte.class == Byte.TYPE);//返回true

System.out.println(short.class == Short.TYPE);//返回true

System.out.println(long.class == Long.TYPE);//返回true

System.out.println(float.class == Float.TYPE);//返回true

System.out.println(double.class == Double.TYPE);//返回true

System.out.println(void.class == Void.TYPE);//返回true

System.out.println(int[].class.isPrimitive());//返回false

System.out.println(int[].class.isArray());//返回true 判断是否是数组类型

摘自 dych3r的专栏