-
加載類會占用棧內存。如果在編譯時就加載,在運行時沒有調用,那么就會浪費內存,而new一個對象并讓一個變量引用他(wrod w = new Wrod()),又是強引用,GC無法回收內存,就會一直占用內存。 靜態加載:指在編譯時就會加載(new一個對象就是靜態加載) 動態加載:在運行時加載(需要的時候才加載) 動態加載的方法: 用Class.forName();的方式加載就是是動態加載,只會在調用這個方法的時候才會去加載查看全部
-
獲得類類型的方式有三種: 1. 在得知該類的類名時直接在后面.class就可以得到一個class類型的對象 Class c = Foo.class 2. 在已有該類的實例對象的時候,通過這個實例對象調用.getClass()方法,也可以得到一個class類型的對象 3. 在得知該類的路徑的時候,調用Class的靜態方法ClassForName()方法,就可以得到一個Class類型的對象 用該類的類類型可以創建該類實例對象,用newInstance()方法再強轉為該類 Foo foo = (Foo)c.newInstance();查看全部
-
創建一個類,那么這個類就是Class類的對象,Class就是這個類的類類型(Class Type)查看全部
-
靜態加載類:編譯時加載的類(用new關鍵字創建的類) 動態加載類:運行時加載的類(用類類型創建的類,需要有接口,活抽象父類) 如 Class c = Class.forName("類全名");就是動態加載。 接口的引用 = c.newInstance();//創建實例對象,需要有無參構造方法。查看全部
-
反射 Class類 java世界中萬事萬物皆對象。類是java.lang.Class類的實例變量。 如何得到類對象? 1 Class c = 類名.class; 2 Class c = 類的實例對象.getClass(); 2 Class c = Class.forName("全類名");查看全部
-
反射 Class類 java世界中萬事萬物皆對象。類是java.lang.Class類的實例變量。 如何得到類對象? 1 Class c = 類名.class; 2 Class c = 類的實例對象.getClass(); 2 Class c = Class.forName("全類名");查看全部
-
Java反射機制——通過反射了解集合泛型的本質 1:反射的操作都是編譯之后的操作;就是運行階段 2:java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦 我們可以通過方法的反射來操作,繞過編譯 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向list2集合中添加一個int 型的值;繞過編譯 當然是不能直接foreach list2集合的,會報類型轉換錯誤查看全部
-
一、如何獲取某個方法:方法的【名稱】和【方法的參數列表】才能【唯一確定】某個方法 1、要獲取一個類的某個方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數寫成int,int; ——> 來獲取 public void print(int a,int b) 3、同樣getDeclaredMethdo(name,paramterTypes)獲得自己聲明的該方法 二:方法的反射操作;就是用method對象進行方法調用;當然還是需要傳參的 method.invoke(對象實例,參數列表) 2.1:invoke(user,new Object[]{10,20})倘若沒有參數就可省略:invoke(user) 2.2:invoke(user,10,20)//直接傳參查看全部
-
Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造方法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[]查看全部
-
只要在類里面聲明的都有類類型 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查看全部
-
萬事萬物皆為對象,類也是對象,任何一個類都是Class類的對象。 Class c1就聲明了一個Class類的實例對象,但是不能通過new關鍵字來創建,而是有一下三種方法創建。 1、Class c1 = Foo.class;//任何一個類都有一個隱含的靜態成員變量class,如果Foo已經存在,可以用這種方法來創建Foo的類類型(class type),即Foo類的類類型就是Class類的一個實例對象。 2、Class c2 = foo.getClass();//如果Foo類的對象foo已經存在,可以通過這種方法來創建Foo類的類類型。 并且,c1==c2是true的,因為任何一個類只有一個類類型。 3、Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");//通過Foo的全稱來創建 可知,c2==c3也是true的。 而且,可以用類類型來創建Foo的實例對象,如下 Foo foo1 = (Foo)c1.newInstance();//前提是Foo有無參的構造方法查看全部
-
Java反射知識點查看全部
-
Java集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了查看全部
-
方法簽名:方法名稱+方法參數列表查看全部
舉報
0/150
提交
取消