反射就是把java中各个成分(比如方法,属性,package,数组之类的有统一名字,又能抽象出来的东西)映射成java中相应的各种类
字节码:当加载类时,先把类的二进制字节码加载到内存中,再用字节码复制一个又一个对象
得到字节码方式:如果内存中已经存在该字节码,则返回该字节码,如不存在,则先加载,再返回加载的字节码
三种方式获得字节码:
1. 对象.getClass();
2. 类.Class
3. Class.forName("");
如:
String str= “”;
Class cs1= str.getClass();
Class cs2= String.Class();
Class cs3= Class.forName("java.lang.String");
public class ReflectTest {
public static void main(String args[]) {
String str1="";
Class cls1 = str1.getClass();
Class cls2 = String.class;
try {
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1==cls3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(cls1==cls2);
System.out.println(cls1.isPrimitive());
//String不是基本类型,isPrimitive判断是否为基本类型
}
}
也就是说,String类型的实例对象他们因为字节码相同
所以他们相等