------- android培訓、java培訓、期待與您交流!
----------
一:class類:
類的實例表示正在運行的 Java 應用程序中的類和接口。枚舉是一種類,註釋是一種接口。每個數組屬於被映射爲 Class 對象的一個類,所有具有相同元素類型和維數的數組都共享該 。
1、Class是Java程序中各個Java類的總稱;它是反射的基石,通過Class類來使用反射。
2、Class和class的區別
1)class:Java中的類用於描述一類事物的共性,該類事物有什麼屬性,沒有什麼屬性,至於這個屬性的值是什麼,則由此類的實例對象確定,不同的實例對象有不同的屬性值。
2)Class:指的是Java程序中的各個Java類是屬於同一類事物,都是Java程序的類,這些類稱爲Class。例如人對應的是Person類,Java類對應的就是Class。
3、屬性:類名,類的訪問屬性,類所屬包名,字段名稱列表,方法名稱列表等。
二、對象的創建和使用:
1、創建實例對象:不可用new Class()的方式,因爲Class沒有這樣的構造方法。而是將字節碼對象賦值給Class變量。如Class c1 =Person.class。
如Person類,它的字節碼:首先要將Person的java文件編譯爲class文件放於硬盤上,即爲二進制代碼,再將這些代碼加載到內存中,接着用它創建一個個對象。就是把類的字節碼加載進內存中,再用此字節碼創建一個個對象。當有如Person、Math、Date等等的類,那麼這些字節碼就是分別的一個Class對象。即Class c2 =Date.class;。
2、獲得類的字節碼對象:如Class.forName(”java.lang.String”)即獲得String.class。得到這個字節碼對象有兩種情況:
1)此類已經加載進內存:若要得到此類字節碼,不需要再加載。
2)此類還未加載進內存:類加載器加載此類後,將字節碼緩存起來,forName()方法返回加載進來的字節碼。
3、得到各字節碼對應的實例對象(Class類型)的方式:
1)類名.class:如System.class,String.class等等
2)對象.class:如new Date().getClass()或者d.getClass()。(Date d = new Date())
3)Class.forName(“類名”):如Class.forName(”java.lang.String”)
當獲取類名的時候,是不知道此類的名稱的,forName(字符串參數)方法中傳入字符串型的變量作爲對外訪問的入口,即傳入什麼類名就獲得什麼類名,從而得知相應的類名。
注:
forName()是靜態方法,是反射中使用的一種方式獲取字節碼的實例對象。
每個類的字節碼對象只有唯一的一個,如任何字符串對象,對應唯一的String.clas字節碼。
4、九個預定義的Class:
1)包括八種基本類型(byte、short、int、long、float、double、char、boolean)的字節碼對象和一種返回值爲void類型的void.class。
2)Integer.TYPE是Integer類的一個常量,它代表此包裝類型包裝的基本類型的字節碼,所以和int.class是相等的。
基本數據類型的字節碼都可以用與之對應的包裝類中的TYPE常量表示
數組類型的Class實例對象,可以用Class.isArray()方法判斷是否爲數組類型的。
5、總結:只要是在源程序中出現的類型都有各自的Class實例對象,如int[].class、void.class等。
三、方法:(API)
1、static Class forName(String className)
返回與給定字符串名的類或接口的相關聯的Class對象。
2、Class getClass()
返回的是Object運行時的類,即返回Class對象即字節碼對象
3、Constructor getConstructor()
返回Constructor對象,它反映此Class對象所表示的類的指定公共構造方法。
4、Field getField(String name)
返回一個Field對象,它表示此Class對象所代表的類或接口的指定公共成員字段。
5、Field[] getFields()
返回包含某些Field對象的數組,表示所代表類中的成員字段。
6、Method getMethod(String name,Class… parameterTypes)
返回一個Method對象,它表示的是此Class對象所代表的類的指定公共成員方法。
7、Method[] getMehtods()
返回一個包含某些Method對象的數組,是所代表的的類中的公共成員方法。
8、String getName()
以String形式返回此Class對象所表示的實體名稱。
9、String getSuperclass()
返回此Class所表示的類的超類的名稱
10、boolean isArray()
判定此Class對象是否表示一個數組
11、boolean isPrimitive()
判斷指定的Class對象是否是一個基本類型。
------- android培訓、java培訓、期待與您交流! ----------