-
1. 萬變不離其宗:要想獲得類的信息,就必須要獲得類的類類型 2. 把一段代碼單獨載出去寫成一個方法: 選定代碼塊 -->Refactor(重構)--> Extract Method(抽取方法)-->給導出的方法命名。查看全部
-
.Class類的使用 .方法的反射 .成員變量的反射 .構造函數的反射 .Java類加載機制查看全部
-
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(")"); } }查看全部
-
獲取類中方法的信息查看全部
-
Class.forName("類的全稱"): * 不僅表示了類的類類型,還代表了動態加載類 * 請大家區分編譯、運行 * 編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載類 用new創建對象,屬于靜態加載類,在編譯時刻就需要加載所有的可能使用到的類,只要有一個類缺失或者類中某個成員缺失,就會報錯(不管實際上有沒有用到這個類),導致整個程序都無法運行。 于是我們希望:要用哪個類的時候再加載這個類,不用就不加載。 通過動態加載類可以解決上述問題。 本例中舉了Word類、Excel類加載的例子,現在做動態加載: Class c = Class.forName(args[0]); //通過類類型,創建該類對象,這里就產生一個問題:是生成Word呢還是生成Excel?老師的解決思路是:只創建一個新類OfficeAble,作為接口,令Word類、Excel類都實現這個接口就可以了: OfficeAble oa = (OfficeAble)c.newInstance(); oa.start(); class Word implements OfficeAble { public void start(){} } 代碼設計思路:功能性的類最好使用動態加載。 Class c = Class.forname(參數);//動態加載類返回該類的類類型。 接口 x = (接口)c.newInstance();通過轉換為接口的類型,用來實現方法。查看全部
-
Class類 1. 在面向對象的世界里,萬事萬物皆對象。 但在java語言中,有兩樣東西不是對象:靜態成員(變量、方法)、普通數據類型(int等)。另外,基本數據類型的包裝類就是對象了。關于靜態成員,它屬于類而不屬于對象。 類是對象,類是java.lang.Class類的實例對象。 2. Class類的實例(對象)到底如何表示? There is a class named Class. Class類(Class.class)的無參構造函數是私有的,只有Java的虛擬機可以創建Class類的實例對象。 這里先在任意一個類A的外頭定義一個class Foo(){};在類A中創建對象:Foo foo1 = new Foo(); 任何一個類都是Class的實例對象,這個實例對象有三種表示方式: ---> 第一種表示方式:實際上在告訴我們任何一個類都有一個隱含的靜態成員變量class。 Class c1 = Foo.class; //已知類名 ---> 第二種表達方式,已知該類的對象,通過getClass方法。 Class c2 = foo1.getClass(); //已知對象名 -----官網的解釋:c1,c2表示了Foo類的類類型(class type)??傊?,類是對象,是Class類的實例對象,這個對象我們稱之為該類的類類型。如上面所舉的例子,Foo類的對象是Foo自身的實例對象(例如foo1),Foo類的類類型是指Class類的對象。 -----不管c1 還是 c2,都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象,所以這里c1=c2。 ---> 第三種表達方式 Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");這里要寫類的全名,也就是包含包名。 ----------- 我們完全可以通過類的類類型創建該類的對象實例:通過c1、c2、c3創建Foo的實例對象: Foo foo = (Foo)c1.newInstance();需要強制類型轉換。注意,Foo類必須有自己的無參構造方法!這是前提條件。查看全部
-
JAVA-Reflect專題 * Class類的使用 * 方法的反射 * 成員變量的反射 * 構造函數的反射 * Java類加載機制查看全部
-
通過反射了解泛型的本質: 1、泛型與非反省的區別:ArrayList list=new ArrayList();與ArrayList<String> list2=new ArrayList<String>();list.add(任意類型)可以添加任意類型,而list2.add(String類型)只能添加string類型,java中的泛型是防止錯誤輸入的,只在編譯階段有效。2、通過判斷list.getClass()==list2.getClass();返回TRUE,可知反射的作用都是在編譯之后操作的,泛型在繞過編譯之后就無效了(通過invoke方法反射可知方法反射在編譯后無效)。查看全部
-
數據類型的類類型查看全部
-
類的反射,方法的反射,構造函數的反射查看全部
-
方法的反射 - Java獲取類的方法信息 /** * 打印類的信息,包括類的成員函數、成員變量(只獲取成員函數) * @param obj 該對象所屬類的信息 */ public static void printClassMethodMessage(Object obj){ //要獲取類的信息 首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象 c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 */ 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.print(class1.getName()+","); } System.out.println(")"); } }查看全部
-
基本的數據類型對應的也有類類型,只要是在類中聲明的關鍵字都會有類類型查看全部
-
Class c=class.forname(參數);//動態加載類返回該類的類類型 接口 c=(接口)c.newInstance();通過轉換為接口的類型。來實現方法查看全部
-
Class類的實力對象有三種獲取形式;Foo.class;foo1.getClass();Class.forName("com.moc.Foo")查看全部
-
基本數據類型,void關鍵字都有其類類型查看全部
舉報
0/150
提交
取消