反射的基石——Class类
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
一、概述
? ? 1、Java程序中的各個Java類屬于同一類事物,描述這類事物的Java類名就是Class。
? ? 2、對比提問:眾多的人用一個什么類表示?眾多的Java類用一個什么類表示?
????? ? 人 ——> Person
????? ? Java類 ——> Class
? ? 3、對比提問: Person類代表人,它的實例對象就是張三,李四這樣一個個具體的人,Class類代表Java類,它的各個實例對象又分別對應(yīng)什么呢?
????? ? ①?對應(yīng)各個類在內(nèi)存中的字節(jié)碼,例如,Person類的字節(jié)碼,ArrayList類的字節(jié)碼,等等。
????? ? ②?一個類被類加載器加載到內(nèi)存中,占用一片存儲空間,這個空間里面的內(nèi)容就是類的字節(jié)碼,不同的類的字節(jié)碼是不同的,所以它們在內(nèi)存中的內(nèi)容是不同的,這一個個的空間可分別用一個個的對象來表示,這些對象顯然具有相同的類型,這個類型是什么呢?
? ? 4、如何得到各個字節(jié)碼對應(yīng)的實例對象( Class類型)
????? ? ① 類名.class,例如,System.class
? ? ????② 對象.getClass(),例如,new Date().getClass()
? ? ????③ Class.forName("類名"),例如,Class.forName("java.util.Date");
????????? ? 注:此方式的兩種含義——
????????????? ? > 如果該類已經(jīng)被類加載器加載至jvm虛擬機中,那么直接返回該字節(jié)碼實例對象
????????????? ? > 否則類加載器先將該類加載至jvm虛擬機并緩存,然后返回該字節(jié)碼實例對象
? ? 5、九個預(yù)定義Class實例對象
boolean byte char short int long float double void Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE?? ?????①?參看Class.isPrimitive方法的幫助
????? ? ②?Int.class == Integer.TYPE
package staticimport;public class ReflectTest {public static void main(String[] args) throws Exception {String str = "abc";Class clazz = str.getClass();Class clazz2 = String.class;Class clazz3 = Class.forName("java.lang.String");//三種方式獲取String類的Class的實例對象均是同一個!System.out.println(clazz == clazz2);System.out.println(clazz == clazz3);//String是否是原始類型(false)System.out.println(String.class.isPrimitive());//int是否是原始類型(true)System.out.println(int.class.isPrimitive());//int與Integer的Class類型是否一樣(false)System.out.println(int.class == Integer.class);//Integer.TYPE其實就是int.class(true)System.out.println(int.class == Integer.TYPE);//int[]的Class類型是否是原始類型(false)System.out.println(int[].class.isPrimitive());//int[]的Class類型是否是數(shù)組類型(true)System.out.println(int[].class.isArray());}}? ? 6、數(shù)組類型的Class實例對象
????????Class.isArray()
? ? 7、總之,只要是在源程序中出現(xiàn)的類型,都有各自的Class實例對象,例如,int[],void…
轉(zhuǎn)載于:https://my.oschina.net/Howard2016/blog/1613738
總結(jié)
以上是生活随笔為你收集整理的反射的基石——Class类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react native 生成APK
- 下一篇: javap命令