反射的基础——Class类
Class代表Java类:
类的名字,访问属性,所属包名,字段名称列表,方法名称的列表……
Person p1 = new Person();
Person p2 = new Person();
Date
Math
得到类的字节码的方法:
(类名.class
Class cls1 = Date.class//字节码一
Class cls2 = Math.class//字节码二
(已经加载过,在JVM里:
p1.getClass();//代表字节码的对象,有getClass方法得到方法所属于的class
(没有加载:
Class.forName("java.lang.String") //类加载器加载,之后把字节码缓存起来,这个forName方法返回加载进来的字节码
---------------------------------------------------------------------
package com.itheima;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String str1 = "abc";
Class cls1 = str1.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
System.out.println(cls1.isPrimitive());
System.out.println(int.class.isPrimitive());
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE);//定义一个常量TYPE,代表包装类型所包装的基本类型的字节码
System.out.println(int[].class.isPrimitive());//数组也是类型,但是不是原始类型
System.out.println(int[].class.isArray());
}
}
打印结果
true
true
false
true
false
true
false
true
总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如int[],void……