-
Java中 數據類型、靜態類不是面向對象的。查看全部
-
基本數據類型,靜態成員不是對象查看全部
-
類是Class類的對象,Class類位于Java.lang.Class查看全部
-
class類的使用查看全部
-
得到類的類型有三種方式 類名.class Class.forName(全類名) 類的實例.getClass() 類類型.newInstance() Method 使用Class下的方法 getMethods公共方法 getDeclearedMethods所有聲明的方法查看全部
-
反射--java高級開發必須懂的 2-1 動態加載類,這個章節有必要思考、琢磨、學習查看全部
-
java的集合的泛型在編譯后是去泛型化的 java中集合的泛型,是防止錯誤的輸入,只在編譯階段有效,繞過編譯階段就無效了。 比如: ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<String>(); list1.add("hello"); //正確 //list.add(20); //編譯出錯,不是String類型 Class c1 = list.getClass(); Class c2 = list1.getClass(); System.out.println(c1 == c2);//輸出true; //用方法映射來驗證集合編譯后的去泛型化 try{ Method m = c2.getMethod("add", Object.class); m.invoke(list1, 20);//在這里能夠把int型20加到ArrayList<String>集合中,因為映射是在運行時加載類的 System.out.println(list1);//輸出:[]hello,20] } catch(Exception e){ }查看全部
-
1、java任何類都是java.lang.Class的實例對象,這個對象(類)稱為該類的類類型。 2、java.lang.Class類的構造函數是private的,因此不能通過new來創建實例對象。有三種方法可獲取java.lang.Class類: 2.1、所有類均有一個靜態的成員變量class,可通過該靜態成員變量獲取Class類,如MyClass.class返回的就是java.lang.Class。 2.2、通過類的實例化對象的成員函數getClass可獲取java.lang.Class類,如(myClass是MyClass的一個實例對象)myClass.getClass()返回java.lang.Class。 2.3、可通過java.lang.Class的成員函數forName(String className)來獲取java.lang.Class類,如Class.forName("mypackage.MyClass")返回的就是java.lang.Class類型了。 3、可通過類的類類型創建該類的實例對象,如Class c = MyClass.class; MyClass myClass = c.newInstance();注意:該用法需要類MyClass類有無參數構造方法。查看全部
-
反射的升華操作 泛型 通過class,method了解泛型的本質 編譯之后集合的泛型是去泛型化的 java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯無效 驗證:通過方法的反射來操作,繞過編譯 method m = c1.getmethod("方法名",object.class); m.invoke(list1,100); //繞過編譯操作,繞過了泛型 system.out.println(list1.size());查看全部
-
只要在類里面聲明的都有類類型 public static void pringClassMessage(Object object){ //要獲取類的信息,首先要獲取類的類型 Class c=object.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.println(returnType.getName()); //得到方法名 System.out.println(ms[i].getName()+"("); //獲取參數類型-->得到的是參數列表的類型的類類型 Class[] paramType=ms[i].getParameterTypes(); for (Class class1: paramType) { System.out.println(class1.getName()+","); } System.out.println(")"); } } }查看全部
-
動態加載一個類 Class c = Class.forName("類的全稱") 不僅表示了類的類類型,還代表了動態加載類 編譯時加載類是靜態加載類,運行時刻加載類是動態加載類 new創建的對象 是靜態加載類,在編譯時就需要加載所有的可能使用到的類,一個出錯,全部沒用。通過動態加載類可以解決。Class c=Class.forName();,通過類類型,創建該類對象。 通過繼承標準類型接口做強制類型轉換。 officeAble oa = (OfficeAble)c.newInstance(); oa.start(); Class XXX implements officeAble{...}查看全部
-
動態加載一個類 Class c = Class.forName("類的全稱") 不僅表示了類的類類型,還代表了動態加載類 編譯時加載類是靜態加載類,運行時刻加載類是動態加載類 new創建的對象 是靜態加載類,在編譯時就需要加載所有的可能使用到的類,一個出錯,全部沒用。通過動態加載類可以解決。Class c=Class.forName();,通過類類型,創建該類對象。 通過繼承標準類型接口做強制類型轉換。查看全部
-
動態加載一個類 Class c = Class.forName("類的全稱") 不僅表示了類的類類型,還代表了動態加載類 編譯時加載類是靜態加載類,運行時刻加載類是動態加載類 new創建的對象 是靜態加載類,在編譯時就需要加載所有的可能使用到的類,一個出錯,全部沒用。通過動態加載類可以解決。Class c=Class.forName();,通過類類型,創建該類對象。 通過繼承標準類型接口做強制類型轉換。查看全部
-
反射注意點...查看全部
-
編譯之后在運行的時候是去泛型的.查看全部
舉報
0/150
提交
取消