反射的基石--Class

来源:互联网 发布:接吻会传染什么病知乎 编辑:程序博客网 时间:2024/05/01 15:45
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代码:
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 判断是否是数组类型

6.反射 --> 反射就是把Java类中的名种成分映射成相应的Java类,

原创粉丝点击