-
獲取類的成員對象 Field[]=c.getFields() 獲取全部的 Field[]=c.getDeclaredFieds()查看全部
-
獲取累的方法 Method[]=c.getmethod()查看全部
-
反射課程的內容查看全部
-
類是java.lang.Class類的對象查看全部
-
類的動態加載查看全部
-
Class類的概念查看全部
-
3.獲取方法信息 import java.lang.reflect.Method; public class ClassUtil { public static void printClassMessage(Object obj){ //獲取類的信息,首先獲取類的類類型 Class c = obj.getClass(); //獲取類的名稱 String className = c.getName(); //獲取類的方法 Method[] methods = c.getMethods();//獲取自己聲明的方法c.getDeclaredMethods(); for(Method method:methods){ //獲取方法返回值類型 Class returnType = method.getReturnType(); //獲取方法的名稱 String methodName = method.getName(); //獲取方法參數類型 Class[] pramTypes = method.getParameterTypes(); } } }查看全部
-
1.Class類的使用 //Object的實例對象如何表示 Object obj = new Object(); //任何一個類都是Class的實例對象,這個實例對象有三種表達方式: (1) Class c1 = Object.class; (2) Class c2 = obj.getClass(); (3) Class c3 = Class.forName(" java.lang.Object"); 其中:c1==c2==c3 //通過類的類類型創建該類的對象實例。 Object obj = (Object)c1.newInstance();查看全部
-
2.動態類加載: //動態加載類,在運行時刻加載 Class c = Class.forName("類名"); //通過類類型,創建該類對象 Object obj = (Object)c.newInstance();查看全部
-
1. 萬變不離其宗:要想獲得類的信息,就必須要獲得類的類類型 2. 把一段代碼單獨載出去寫成一個方法: 選定代碼塊 -->Refactor(重構)--> Extract Method(抽取方法)-->給導出的方法命名。 成員變量也是對象 java.lang.reflect.Field Filed類封裝了成員變量的操作 getFields()方法獲取的是所有public成員的信息 構造函數也是對象; java.lang.Constructor中封裝了構造函數的信息; getConstructors獲取所有的public的構造函數; getDeclaredConstructors得到所有的構造函數;查看全部
-
1. 基本的數據類型、void關鍵字都有類類型。 截圖中的double.class和Double.class是不同的類類型,前者是數據類型double的類類型,后者是Double類的類類型。 getSimpleName()可以返回不包含包名的類名。 2. Class類的基本API操作。 public static void printClassMessage(Object obj){ //要獲取類的信息,首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象,c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是"+c.getName()); /*萬事萬物皆對象 * Method類——方法對象 * 一個成員方法就是一個Method對象 * Method類封裝了對成員方法的操作 * getMethods()方法獲取的是所有的public的函數,包括從父類繼承而來的 * getDelaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 */ Method[] ms = c.getMethods();//或者c.getDeclaredMethods() for(int i=0;i<ms.length;i++){ //得到方法的返回值類型的類類型 Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" ");//返回值類型的名字 //得到方法的名稱 System.out.print(ms[i].getName()+"("); //獲取參數類型--->得到的是參數列表的類型的類類型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.println(class1.getName()+","); } System.out.println(")"); } }查看全部
-
集合中的類型 還是原來的類型 因此不能夠用forech來遍歷 會引起類型轉化錯誤查看全部
-
c1 == c2 返回true說明編譯之后集合的泛型是去泛型化的 集合沒有泛型 也就是說Java中集合的泛型 是防止錯誤輸入的 只有在編譯時刻有效 繞過編譯就無效了 變異之后 泛型都是去泛型化的 一個集合中放一種類型 放其他的類型 就出錯 驗證:用方法的反射操作 繞過編譯查看全部
-
反射的操作都是編譯之后的操作 都是變成字節碼(類類型)之后的操作查看全部
-
除了基本的數據類型、靜態成員不是對象,萬事萬物皆對象,而基本的數據類型可封裝為包裝類。 1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】 動態加載:即運行時候才去找該類。找不到才報錯,其他方式包括new都是編譯器就會加載,即編譯報錯, 動態加載+接口技術實現補丁更新等技術查看全部
舉報
0/150
提交
取消