只要是被虚拟机加载过的话,同一种类型的Class,就只有一份字节码
一:反射的基石
1:反射技术建立在jdk提供的Class类上,因此要掌握反射技术,首先要熟悉Class类。
2:通过Class类就可以得到java类中方方面面的内容<如:java类中的:构造方法(Constructor)、属性(field)、方法(method)>。
3:Class cls=?(?代表什么,你知道吗?)
注:?代表字节码
4:什么是字节码?
注:java代码编译的时候,将java源程序翻译成字节码<.class>存储到硬盘上,然后类加载器将字节码加载到jvm的内存中,生成一个又一个java对象。
5:得到字节码的三种方式:
String str1="abc"
Class cls1=str1.getClass();<通过对象得到字节码>
Class cls2=String.class;<通过类得到字节码>
Class cls3=Class.forName("java.lang.String");<通过包名得到字节码>
注:得到了一个类的字节码,那么就可以得到字节码的全部成分,下面将一一介绍.
6:同一类型的字节码相同吗?
System.out.println(cls1==cls2);返回:true
System.out.println(cls1==cls3);返回:true
注:说明同一类型的字节码只有一份,同一类型的字节码是相同的。
二:字节码的简单应用<检测数据的类型>
1: String str1="abc";
Class cls1=str1.getClass();
//测试String是否为基本类型的字节码,返回false;因为:String是一个类 System.out.println(cls1.isPrimitive());
2: //int是基本类型的字节码,返回true
System.out.println(int.class.isPrimitive())
3: //int是基本类型,Integer是类,因此返回:false
System.out.println(int.class==Integer.class);
4: //包装类型的基本类型的字节码比较,返回true
System.out.println(int.class==Integer.TYPE);
5://数组不是基本类型,返回false
System.out.println(int[].class.isPrimitive()); |