-
1.動(dòng)態(tài)加載類:實(shí)在運(yùn)行時(shí)編譯; 2.在動(dòng)態(tài)加載時(shí),創(chuàng)建對(duì)象時(shí),不要直接加載,要寫一個(gè)接口,來(lái)統(tǒng)一類;查看全部
-
原來(lái)泛型是在編譯時(shí)進(jìn)行的,怪不得在myeclipse中進(jìn)行編碼時(shí)會(huì)提示錯(cuò)誤呢。查看全部
-
## 通過(guò)反射了解集合泛型的本質(zhì) * 編譯之后集合的泛型是去泛型化的. * Java中集合的泛型,是繁殖輸入錯(cuò)誤的,只在編譯階段有效,繞過(guò)編譯就無(wú)效了. * 可以通過(guò)方法反射來(lái)操作,繞過(guò)編譯. ``` java ArrayList<String> list = new ArrayList<String>(); Class class = list.getClass(); try{ Method m = class.getMethod("add", Object.class); m.invoke(list, 100); //繞過(guò)編譯操作,繞過(guò)了泛型. } catch (Exception e){ e.printStackTrace(); } ``` * 反射的操作都是在運(yùn)行的時(shí)候操作的,全部繞過(guò)了編譯.查看全部
-
## 方法反射的基本操作 * 方法名稱 和 方法的參數(shù)列表才能位移決定某個(gè)方法. * 方法對(duì)象method的invoke(對(duì)象,參數(shù)列表)方法來(lái)進(jìn)行反射. * 對(duì)于可變參數(shù),可以直接列出,或者使用數(shù)組表示. * invoke函數(shù) 方法如果沒(méi)返回值,返回null;若有的花就返回具體返回值,需使用強(qiáng)制類型轉(zhuǎn)換.查看全部
-
## 獲取成員變量構(gòu)造函數(shù)信息 * java.lang.reflect.Field類封裝了關(guān)于成員變量的操作. * getFields() 獲取所有public的成員變量的信息. * getDeclaredFields() 獲取該類自己聲明的成員變量信息. * getType() 獲取成員變量類型的類類型. * getName() 獲取成員變量的名稱. * java.lang.Constructor 中封裝了構(gòu)造函數(shù)的信息. * getConstructor() 獲取所有public的構(gòu)造函數(shù). * getDeclaredConstructor() 獲取所有的構(gòu)造函數(shù). * getName() 獲取名稱 * getParameterTypes() 獲取參數(shù)列表變量的類類型.查看全部
-
## 獲取方法信息 * double.class 和 Double.class不同. * package不存在類類型,package不是在類里面聲明的.只要是在類里面聲明的都有類類型. * gatName() 獲取類的全稱. double.class是double, Double是java.lang.Double. * getSimpleName() 獲取不帶包名的名稱. Double是Double. * 方法是Method類的對(duì)象. * 獲取所有public函數(shù)(包括繼承來(lái)的)Method[] ms = c.getMethods(); * getDeclaredMethods() 獲取所有該類自己聲明的方法,不限訪問(wèn)權(quán)限. * ms[i].getName() 獲取方法的名稱. * Class returnType = ms[i].getReturnType() 獲取方法返回值類型的類類型. * Class paramTypes = ms[i].getParameterTypes() 獲取參數(shù)列表的類的類類型.查看全部
-
## 動(dòng)態(tài)加載類 * 編譯時(shí)加載類是靜態(tài)加載類,運(yùn)行時(shí)刻加載類是動(dòng)態(tài)加載類. * new 創(chuàng)建對(duì)象 是靜態(tài)加載類,在編譯的時(shí)候就需要加載所有可能使用到的類. * 在運(yùn)行時(shí)加載,可以只在運(yùn)行時(shí)加載,用哪個(gè)就加載哪個(gè). * 用Class.forName()動(dòng)態(tài)加載類,再用newInstance創(chuàng)建類對(duì)象,可以創(chuàng)建為Interface,然后相關(guān)的類實(shí)現(xiàn)接口就行. * 用動(dòng)態(tài)加載,不需要重新編譯,直接動(dòng)態(tài)的運(yùn)行使用即可.有助于程序架構(gòu).查看全部
-
# 反射--java高級(jí)開發(fā) ## Class類的使用 * java中靜態(tài)成員和普通數(shù)據(jù)類型(有對(duì)應(yīng)的封裝類來(lái)彌補(bǔ),比如Integer)不是對(duì)象. * 類也是對(duì)象,類是java.lang.Class類的實(shí)例對(duì)象. * //Constructor. Only the Java Virtual Machine creates Class objects. private CLass() {} * Class實(shí)例對(duì)象不能直接通過(guò)構(gòu)造方法構(gòu)造,以下是三種標(biāo)示方法: Foo foo1 = new Foo(); 1. Class c1 = Foo.class; //任何一個(gè)類都有一個(gè)隱含的靜態(tài)成員變量class. 2. CLass c2 = foo1.getClass(); //c1, c2表示了Foo類的類類型(class type) 3. Class c3 = null; c3 = Class.forName("[className]") //會(huì)拋出ClassNotFoundException異常 * c1 == c2 == c3, 一個(gè)類只可能是Class類的一個(gè)實(shí)例對(duì)象. * 可以直接通過(guò)類的類類型創(chuàng)建該類的實(shí)例對(duì)象. Foo foo = (Foo) c1.newInstance(); //同樣會(huì)拋出異常,需要有無(wú)參數(shù)的構(gòu)造方法查看全部
-
類是對(duì)象 是java.lang.class類的實(shí)例對(duì)象查看全部
-
類是對(duì)象, 類是java.lang.Class類的實(shí)例對(duì)象。 靜態(tài)成員、基本數(shù)據(jù)類型不是對(duì)象查看全部
-
動(dòng)態(tài)加載類查看全部
-
反射繞過(guò)編譯,在運(yùn)行時(shí)執(zhí)行。靜態(tài)加載與動(dòng)態(tài)加載查看全部
-
使用class.forName時(shí),如果需要調(diào)用 則首先需要?jiǎng)?chuàng)建一個(gè)接口,讓需要的對(duì)象繼承他。然后.newInstance()實(shí)例化。 然后就可以用了。 功能型的類,盡量動(dòng)態(tài)加載,而不是靜態(tài)加載查看全部
-
實(shí)例的實(shí)例查看全部
-
invoke 調(diào)用,喚起查看全部
舉報(bào)
0/150
提交
取消