12Java類加載機(jī)制與反射_第1頁(yè)
12Java類加載機(jī)制與反射_第2頁(yè)
12Java類加載機(jī)制與反射_第3頁(yè)
12Java類加載機(jī)制與反射_第4頁(yè)
12Java類加載機(jī)制與反射_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 ClassLoader 將耳 load 到內(nèi)存code? sequent 12、1 Java類加載機(jī)制 。前而我們給大家介紹過J VM得功能(提供運(yùn)行時(shí)環(huán)境、垃圾回收機(jī)制與提供中立得體系結(jié) 構(gòu))。在提供運(yùn)行時(shí)環(huán)境中有個(gè)子功能就是Class Load e r(類加載器),它主要用于將主類(即 包含了 main方法得類)加載到JVM得code s e gmen t (代碼區(qū))。然后運(yùn)行環(huán)境找 到main方法(程序入口)開始執(zhí)行程序.在整個(gè)程序運(yùn)行得過程中,會(huì)有更多得cla s s被動(dòng) 態(tài)Load到內(nèi)存中。類加載機(jī)制如圖12-1所示: 圖12-1類加載機(jī)制 需要注意得就是:類并非一次性就全部加載完

2、畢,而就是在需要得時(shí)候(運(yùn)行期間)動(dòng) 態(tài)加載到內(nèi)存。利用j ava-v e r b ose:class Test可以觀察類得具體加載過程。 12、2 Java反射機(jī)制 什么就是反射 Java程序在運(yùn)行期間可以動(dòng)態(tài)加載、解析與使用一些在編譯階段并不確左得類型數(shù) 據(jù),這一機(jī)制被稱為反射(Refl ection).反射庫(kù)(refle c t ion libra r y)提供了一個(gè)非常豐富 且精心設(shè)計(jì)得工具類,以便編寫能夠動(dòng)態(tài)操縱Ja va代碼得程序。使用反射,在設(shè)計(jì)與運(yùn) 行中添加新類時(shí),能夠快速得應(yīng)用開發(fā)工具動(dòng)態(tài)得查詢新添加類得能力。 反射方式 反射機(jī)制提供得功能 加載運(yùn)行時(shí)才能確定得數(shù)據(jù)類型 解析

3、類得結(jié)構(gòu)、分析類得能力、獲取英內(nèi)部信息 操作類(進(jìn)行實(shí)例化訪問非靜態(tài)成員,直接利用類劃訪問靜態(tài)成員)或其實(shí)例(訪問 屬性、調(diào)用方法、創(chuàng)建新對(duì)象) 1 2 o 2o 1 Clas s 類 。在程序運(yùn)行期間,Java運(yùn)行時(shí)系統(tǒng)始終為所有得對(duì)象維護(hù)一個(gè)被稱為運(yùn)行時(shí)得類型標(biāo)識(shí), 被稱為Cla s s (注意與c 1 ass得區(qū)別)。通過Class可以完整得得到一個(gè)類中得完整結(jié) 構(gòu),包括此類中得方法立義,屬性立義等。Class就是反射得源頭或入口,通過査瞧JDK幫助 手冊(cè)英常見方法如圖: Class類的常用方法 No. 類型 描述 1 public static Class forName(Strlng

4、 c assName) throws ClassNotFou nd Exception 普通 傳入完整的“包類”名稱實(shí)例化 Oass對(duì)象 2 public Constructor getConstructors() throws SecuritvException 普通 得到一個(gè)癸中的全部構(gòu)造方法 3 public Field getDedaredFields() throws SecurityException 普通 得到一個(gè)類父類中的全部厲性 4 public Field getFields() throws SecurityException 普通 液用本類的全部屬性 5 public

5、Method!) getMethods() throws SecurityException 普通 得到一個(gè)類中的全部方法 6 public Method getMethod(String namezCl3S$. parameterTypes) throws NoSuchMethodException.SecurityException 普通 返回一個(gè)Method對(duì)象,并沒置一 個(gè)方法中的所有參數(shù)類型 7 public Class) getlnterfacesf) 普通 得到一個(gè)類中所實(shí)現(xiàn)的全部接廠 8 public 5tring getNamef) 普通 得到一個(gè)類完整的包類冬稱 9 pub

6、lic Package getPackageQ 普通 得到一個(gè)類的包 10 publicClass? super getSuperclass() 普通 得到一個(gè)類的父類 11 publicT newlnstanu() th rows Instantiatio nExcaptiorJIlQgalAccQSsExcQption 普通 根雰Class定義的類實(shí)例化對(duì)象 12 public Class getComponentType() 普通 返回表示數(shù)組類型的Class 13 public boole合n isArray() 普通 判斷此Class是否是一個(gè)數(shù)組 1 22。2如何獲取C lass類

7、對(duì)象 12. 2. 2、1針對(duì)引用數(shù)據(jù)類型 通過 Class L oade r 得 1 oadClass 方法 C 1 a s s cl = Clas s Loade r、gets y s t e mClass L o ad e r () load Cla s s C i t j o b、P er s on); 調(diào)用靜態(tài)方法Class、f o rName() Class, f o r Namef itjo b Person): Class、f orNam e Co r a c 1 c、jdbc、d i rv e r、Ora c 1 e Dri v er H ; 調(diào)用Obje c t類中定義得g

8、etCl a ss()方法 Per s o n p = new Pe r s on (): Cl a ss cl=p、get C lass(); C 1 ass c 2 = H e I 1 o M x g e t C 1 ass (); 使用、class表達(dá)式 Cla s scl = String、class; C 1 a s s c 2 = . itjo b Person、class; Classc3 = oraclex j d bc di r ver Ora cleDriver class; 12。2. 2、2針對(duì)基本數(shù)據(jù)類型及vo i d 使用、c 1 ass表達(dá)式 C 1 a s s

9、cl = int. class; Clas s c2 = d o u b lc. c 1 as s : C I ass c3 = v o i d . c 1 ass; 調(diào)用相應(yīng)封裝類得Type屬性 Cl a ss cl = Int e g e r、TYPE: Cl a ss c 2 = Do u b 1 ex TYPE; Class c3 = Voi d、TYPE; 。示例如下: ry 引用數(shù)據(jù)類型 a/R 1利用ClassL o ader類得loaderCIass ( n類全名稱”):手動(dòng)加載,會(huì)有異常 Sy s icm、out pri n tln(C 1 a s sLoadcr、ge t

10、S y stemC 1 assLoader ()、load Cla s s(”、itjobx PersonM )、g e tN a m e (); 。/1、2利用Class、forN a me (類全名稱);手動(dòng)加載,會(huì)有異常 Systenu out、printl n (Class. forNamef itjob、Person”)、get N am e (); o /I、3調(diào)用Object類中定義得gctClass()方法 aSystem、o ut、printl n (new P e rson()、getC lass(). g e t Nam e (); 。/ 1、4使用、class表達(dá)式 g

11、 System, out、p r intln(Per s on、class、g e tName(); 。/2、基本數(shù)據(jù)類型與void 3/2、1使用、class表達(dá)式 g Sy s t e m、out、pri n tln( i nt、clas s、gc t Name (); oS y s t e m out. println(doub 1 c、class、g e tN a me(); wSys t cm、o ut、prin t In (voi d . c 1 a ss、get Name (): o /2、2 通過各自得包裝類、TYPE oSystenu out、prin t ln(Integ

12、e r TYPE); aSystem、out pr i ntl n (Double、TYPE); cat c h (Clas s NotFound E xce p tion e) ap、p ri n tStackTrace(): g 1 2.2. 3獲取實(shí)例對(duì)象 。不光可以取得對(duì)象所在類得信息,也可以直接通過Class類得n e w I n stanc e方法進(jìn)行 對(duì)象實(shí)例化操作.n e win s t ance方法原型如下: pub 1 i c T newlnst a nee () th r o ws I nst a ntiationExc e p t i o ib I 1 lega 1 A

13、ccessExcept i o n 。調(diào)用過程: p、getC 1 as s ()、n e w I n st a n c e (): 或: Person、class、n e wlnstance (); 或: Class、f o r N ame ( 、itjob、Pers o n)、new 1 n stance () 創(chuàng)建一個(gè)Person類得實(shí)例。new I nstance方法調(diào)用默認(rèn)得構(gòu)造器初始化新創(chuàng)建得對(duì)象, 如果這個(gè)類沒有默認(rèn)得構(gòu)造器,就會(huì)拋岀一個(gè)異常. 要想調(diào)用有參構(gòu)造方法,則必須使用Co n st r uctor類得n ewlnstance方法. 12o 2.4獲取類得結(jié)構(gòu) c las

14、s類得實(shí)例用于表示運(yùn)行時(shí)得Jav a數(shù)據(jù)類型,包括類、接口.數(shù)組.枚舉、注 解、基本數(shù)據(jù)類型。在類加載時(shí),Java虛擬機(jī)會(huì)自動(dòng)創(chuàng)建相應(yīng)Class對(duì)象。通過反射得到 一個(gè)類得完整結(jié)構(gòu)要使用到j(luò)ava、lang, reflect包,此包下得常見類如下: java、lang r e fl e ctx F i e Id jav 8 . langx reflect、M e thod java. 1 a ng r e fleet、Cons t r uc t o r (T javax lan g r e fie c t、Modi f i e r j a va lan g re f 1 ectx Ar r a

15、y 12。2。4、1獲取類實(shí)現(xiàn)得所有接口 要想取得一個(gè)類所實(shí)現(xiàn)得全部接口,則必須使用Class類中得getlnt e rfaces()法。此 方法左義如下:publ i c Clas s g e tl n terface s ().因?yàn)橐粋€(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,因 此此方法返回一個(gè)C 1 ass類得對(duì)象數(shù)組,之后就可以直接利用Class類中得getName()方 法輸岀即可. 示例如卜一: i n t erf a ce A i n t er f ace B class Person implements A,B p u blic cl a s s Tes t a p ublic static

16、 voi d m a in(S t ring args) ”C1 a s s c = Pe r s o ik clas s getlnt e rfa c es (); fo r (Cl a s s cc : c) $ System、out、p r intln (cc、ge t Name (); 、 12.2. 4、2獲取類所繼承得父類 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但就是只能繼承一個(gè)父類,如果沒有明確得指明繼承那個(gè)類, 則肯泄繼承得就是Object類。所以要想取得一個(gè)類得父類,可以直接使用Cl a ss類中得 getSup e rclass ()方法。此方法立義如下:public C 1 ass l

17、ang、reflect包中,常用方法如卜: Constructor類的常用方法 No. 類型 描述 1 public int getModifiers() 苦通 得到構(gòu)造方法的修飾符 2 public String getName() 苦通 得到構(gòu)造方法的名稱 3 public Class) getParameterTypesO 普通 得到構(gòu)造方法中參數(shù)的類型 4 public String toStringO 普通 返回此構(gòu)造方法的信息 5 publicT newlnstance(Object. initargs) throws InstantiationException, IHegalA

18、ccessException, IIlegaIArgumentExceptionz InvocationTargetException 普通 訶構(gòu)造方法中傳逐參數(shù),實(shí)例化 對(duì)象。 取得訪問修飾權(quán)限得時(shí)候卻發(fā)現(xiàn)返回得就是一個(gè)int數(shù)字而不就是publi c等類型得修 飾符關(guān)鍵字。這就是因?yàn)樵谡麄€(gè)Java中對(duì)于方法得修飾符就是使用一頂?shù)脭?shù)字表示出來得, 如圖所示: java.Iang.reflect.Modifier 中訪問修飾符的值 No. 訪問修飾符 int值 描述 1 default 0 釆用二送制夾對(duì)各個(gè)訪問修飾符 進(jìn)行賦值.這樣可以確保任何的 訪問修飾符組合,相加得到的int 值是唯一的

19、3例如:public static final=l+8+16=25 2 public 1 3 private 2 4 protected 4 5 static 8 6 final 16 7 synchronized 32 如果要想把這個(gè)數(shù)字還原成用戶可以瞧懂得關(guān)鍵字,則必須依靠Modi ficr類完成, 此類左義在ja v a、lang、re flc c t包中.直接使用Modif i er類得以下方法即可將修飾符轉(zhuǎn) 變: pub 1 ic sta t ic S tri n g t oStrin g (i nt mod); 示例如下: imp o rt java, lang、re f 1 ec

20、tx *: cl a ss Pe r so n private String name; p r i vate int ag e : pub I i c P erso n () J pu b 1 i c Person(String name, i nt age) 。 this, name = name; a t h is、age = ag e ; E Overri d e p ub 1 ic St r i n g toStri n g() / TODO Aut o -genera t ed meth o d s tu b return 我叫 M + this、name + ,我今年” + t

21、his. age; 4 publ i c c 1 ass Tes t “public s ta t i c voi d ma i n(Stri n g args) /獲取所有得構(gòu)造方法 oConstnic t o r (? c s = Person、c lass getDeclaredC o nstructors (): for(Co n st r uctor (?c : cs) “/遍歷所有得構(gòu)造方法 。輸出構(gòu)造方法得修飾符 o Sys t em、out、println(M 構(gòu)造器修飾符:”+ Mod i fi e r toS t r i n g (c、getModi f ier s ();

22、 “/輸出構(gòu)造方法名稱 S y stem、o ut、p rint 1 nC構(gòu)適方法名:” + c、gc t N a me (); /輸出構(gòu)造方法所有參數(shù) 1 a ss c t =c、getParamet e r Ty p e s (): aif( c t I e n g th = 0 ) 。o S y s t e m、o ut、p r i n tin (”這就是無參得構(gòu)造方法); 皿1 s e i n t i = 0; nf o r (Class p : c t) 。 a System、ou t . pri n tin ( ” 參數(shù)” + (i+ 1 )+ M +p g etNam e ();

23、 3 a i +; b oo j J E 現(xiàn)在我們已經(jīng)知道如何獲取一個(gè)類得所有構(gòu)造方法規(guī)范,此時(shí)我們可以利用Const r uctor類得ncwl n st a nee調(diào)用有參得構(gòu)造方法來實(shí)例化對(duì)象,其過程如下: k 通過C 1 ass類中得 getConstru ctors ()方法或 ge t DeclaredCon s tructo r s()取得本類中得全部構(gòu)造方法. 2、分析每個(gè)構(gòu)造方法得參數(shù)情況,了解每個(gè)構(gòu)造方法得原型. 3 x 通過Class類中得ge t De c laredConst ru c tor(C 1 ass、 paramete rTy pe s )方法,向構(gòu)造方法中

24、傳遞一個(gè)對(duì)象數(shù)組進(jìn)去,里面包含了構(gòu)造方法中所需得各個(gè)參數(shù). 通過調(diào)用 Con structor 得 n e win s t a n c e(Obje c t 八、i nitargs)方法 實(shí)例化對(duì)象。 示例如下: try C o n st r uctor c = Per s oik cl a ss、get I) ecl a redConstnictor(Str i ng c 1 ass, int class); Sy s t cm、out、p r in t ln( c、n e win s tance(M 張三,25); c atch (II 1 egal A r gumentEx c e p

25、t i on e) 。e、printStackTr a c e (); c a t ch (Instan t ia t ionExc e ption e) 代、p r intSt a ckTrace (); c a t c h (Illeg a I AccessExcept i on e ) c、prin t S t ackT r a c e (): ) c at c h (Invoc a t i onTa r g e tE x c e pt i on e ) 代、printSta c kTrace (); c a tch (Sec u r i t y Excepti on el) e 1、p

26、rintStackTrace(): catch (NoSue h McthodEx c e ptione 1 ) 2 1、print S t a c kTraceO: 1 2。2。4、4獲取類中得方法 要想取得一個(gè)類中得全部方法,可以使用Cl a ss類中得getD e clare d Met h ods ()方法, 此方法返回一個(gè)M ethod類得對(duì)象數(shù)組,如果要想進(jìn)一步取得方法得具體信息,例如:方法 得參數(shù),拋出得異常聲明等等內(nèi)容,就必須依靠Method類來完成. 輸岀本類中得全部方法:p u b 1 i c M e t h od| g e tDecla r edMeth o d s ()

27、 thr o ws Se c u r ityEx c epti o n 輸岀全部得方法(包括父類中得):pu b lie M e t hodC getMetho d s() thr o ws Security E x c ept i on 方法操作: 取得全部得返回值:public Cl a s s ge t Re t urnlr pe () 取得全部得參數(shù):pub 1 ic Class?) getPar a me t e rType() 取得修飾符:pu b 1 i c i nt ge t Mo d ifi e rs () 取得異常信息:P u b 1 i c CI a ss getE x

28、ceptionlpe() 示例如下: /獲得非繼承得所有方法 M e thod me t hods = P e rson、class、ge t DcclaredMethods(): for (Me t hod m : m e thods) a Sys t e m、out print(M o difie r、toStrin g (m g etModi f iers () + + m、ge t Retu r nType() getName() + H + m、getNam e ()+ *( *); Cla s s p a r as = m、get ParameterTy p es (); 4b r

29、 (Cla s s p : p a ra s ) oooSystenu o u t p r i n t ( p、g etName ()+”); ) S y s tem ou t、p r inti n (M ) H ): 通過Class類得g e tMethod方法或getDecla r edMet h od方法,根據(jù)一個(gè)類中得方法名 稱及參數(shù)類型取得Method對(duì)象,并通過i nvo kc ()方法調(diào)用指泄得方法。i nv o ke方 法原型如下: p ub 1 ic Obje c t inv o k e (Objec t obj, Obj e c t、 ar g s) thro ws Ill

30、 e g alAccess E xcep t ion III e galAr g u mentExcept i o n, Invocati o n Targ e tExc e p ti o n 如果要調(diào)用得方法就是類得靜態(tài)方法,obj指定為nu 1 I即可,然后后面就是參數(shù) 列表。 如果就是非靜態(tài)方法,必須傳入一個(gè)類得實(shí)例化對(duì)象,然后后面就是參數(shù)列表。 如果方法就是無參方法: m、invo k e (obj): 。/非靜態(tài) m、i n vok e (nul 1 );。靜態(tài) 如果方法帶參數(shù): m、invo k e( o bj, 10,20); 靜態(tài) m、i n voke(null, 10,2 0

31、): /非靜態(tài) 示例如下: Perso n類中得方法原型: pub I i c v oid f uni (int a, int b); p ubl i c static v oid f un2 (int a St r ing b): 調(diào)用方式: V/非靜態(tài)方法調(diào)用方式 a met h od = Perso n . cl a s s、getD e cl a redM e t hod (fUn V i n t cla s s, i nt、c la s s): m e th o d、inv o ke (obj , 1 0, 2 0 ); /靜態(tài)方法調(diào)用方式 smethod = Person, cla

32、ss、getDeclar e d Me t h od ( f int、cl a s s, St ring、c i ass); s me t h o d、in v oke(nul 1,10, b e llo worl d java 11 ); 12. 2。4、5獲取類中得屬性 在反射操作中也同樣可以取得一個(gè)類中得全部屬性,但就是在取得屬性得時(shí)候有以下兩 種不同得操作: 得到本類、實(shí)現(xiàn)得接口與父類中得所有公共屬性: publ i c Fiel d getFiel d s () thr o w s Sec u rit y Exc e p tion 得到本類中得全部屬性(包括私有屬性): p ubli

33、 c Fie 1 d getDecla r edF i eld s () throw s Se c urityE x cept i o n 以上方法返回得都就是Field得數(shù)組,每一個(gè)Field對(duì)象就表示類中得一個(gè)屬性。 屬性操作: 取得屬性修飾符:public int g e tModi f iers() 取得屬性類型:publ i c Cla ss Objec t v a lue) t hrow s I I le g alArgument E xcep t ion, Il I egalAc c e ssE x cept i o n 設(shè)置屬性可見(在訪問私有屬性得時(shí)候,必須讓這個(gè)屬性可見):

34、 p u blic v o id s e tAcce s s ible (bool e an fla g ) t h rows S ecurityExcep t i 示例如2 Field f = Per s on class. getDeclaredFiel d ( M nameM); / /name 就是本類中 得私有屬性 f set A c c e s s ibl e (t r uc);。/設(shè)置其可見 f、set (obj,李四);o 。/設(shè)置屬性 Systemout% p r intln(f. get ( obj) );/取得屬性 與方法類似,如果類中得屬性就是static修飾得,則ge

35、t與s et方法中得obj為n nil 即可。 獲取類結(jié)構(gòu)信息綜合實(shí)例: a p ackage r e fl e ct: import java、la ng、reflect、*: i m p ort jav a、uti 1 Sc a nner; pu b lie class Ref 1 ectTest pu b lie s t ati c void p rintConstruc t ors(Class cl) C on s t r uctor cons t r ucto r s = cl、getDeclared Con s tnict ors(); 。 fo r (Constnictor c

36、: c o nstruc tors) aS tring name = c、get Nam e (); Syst e m. o u t、p r i n t C ); a S tr i ng mo difier s = Modifiert oStri n g (c g e tMod i fie r s (): Zf (modifiers、leng t h ()0 ) aSystem、out、pr i nt (modifi e rs + M ); 3。S ystenK out、p r int ( n ame +”(”); aClass par a m T y pes = c、g e t Parame

37、te r T ypes(): 。for ( i nt i = 0; i 0) 4 oSys t em、ou t、pri n t (u,); a“System、ou t、print( p aramTy P es 訂、getName (): 4 System、o ut p r inti n (J: M); 。 叩 u blic static v o i d p ri n tMethod s (Class r e tTy p c = m. getR e tur n Ty P e(): g S yst e m、out、p r i nt(H J; a oS (ring modi fiers = Mo d

38、 if i c r、 t o S t r i ng (m、g e t Mo d i f ie r s (); 2 i f (modifiers、len g th() 0 ) ?!癝ys t cm、o u t p r int(mod i fier s + H H): a S y s t e m out pri n t (re tType get N ame() + * + n a me + H(M ); oC 1 a ss par a mTypes = m、getParam e tciT y pes(): a fo r (in t i =0 : i v par a mTyp e s、length

39、: i+) zif(i 0) System out p r int ( M ,); 。Sys tenK out print ( p aram Typ e s 訂、ge t Name (); 。 。System、out、p r int 1 nC):): 3 ) public static void printF i eld s (Class (? cl) 。 Field! fie I ds = cl、getDe c laredFiel d s (); 。for (Fi eldf: fields) Clas s type = f、g e tlp e (): S t ring n a me = f

40、. getNam e (); 2Syst e m、ou t、p ri n t(); St r ing modifi e rs = Modifier、to S tri ng(f、g e tModifie r s (); if (mod ifiers length() 0 ) 。 System、o ut pr i n t(m o d i fier s + *): “S y st e m、out. pr i n t 1 n (typ e . get N ame () +* + name+ ”:); 3 ) publi c static v 0 id m a in(String a r gs) Str

41、 i n g n am e = nul 1 : 4 f (ar g 1 e n gt h 0) 2 n ame = ar g s0: clsc a Sca n ncr i n = new S c a n ner (System in): gSystem、out、p rin t (HEnte r class nam e (e g :jav a . u t i 1、Date): H ): 2 n a me = i ik n e xt (); try Class (? cl = Class、f o rNamemam e ); aoC a s s toS t r ing(cK getModifi e

42、r s(); 。4 f (modi f iersx len gth() 0) Sy s t e m、out、p rint (modifier s +M J; System、out、p r in t (M c lass + n ame); if (su p e r cl != n u 11 a pr i n t Con s tnic t ors(cl); a System、out. p r i n t ln(); a printM e thod s (cl); a System、out、print In (): op r intF i elds (cl); 。System、out、p rintl

43、 n ( ”); J catch (ClassN o tFo u ndExc e ption e ) / TODO Auto-genera t ed cat c h bl o c k 心、p rintStac k T r ac e (): 。 J 12。2. 5通過反射操作數(shù)組 反射機(jī)制不光只能用在類中,也可以應(yīng)用在任意得引用數(shù)據(jù)類型上。當(dāng)然,這就包含了 數(shù)組,數(shù)組使用Arra y類完成. Class類中存在以下一個(gè)方法,用于返回一個(gè)數(shù)組對(duì)象得實(shí)例: p u blic Class?getpone n t Type () 接下來可以利用java、lang、reflect包中得Array類得有些方

44、法來操作: 開辟新數(shù)組: p u b lie s t a tic O b j ect n ewlnstan c e(Cla s s p on entTy pc, im、 dimcn s i o ns) th r ow s 11 legalArgumentEx c eption, N egati v e A rr a yS i zeExce p tion 得到數(shù)組指定下標(biāo)得內(nèi)容: public s tatic Obj ect get(Obje c t array, int in d ex) t hrow s I lleg a lArg u men t E xception A r rayin d

45、 e x Ou t OfB o undsException 修改內(nèi)容: public stat i c vo i d s e t (Object a r ray, i n t index, Obj e ct v a lue) t h rows II 1 e ga 1 Argum e nt E xception. A r r ay I n dexOutOfBou n d sExcept i on 示例如下: 4n t arr =1,3,5,7,9; Cla s s out prin t ln(數(shù)組下標(biāo)為 1 得元素為:+ Ar r a y、g ct(ncwA r r , D); 1 2 o 2

46、o 6 反射與 Anno tat i on 一個(gè)Annotati on要想讓英變得有意義側(cè)必須結(jié)合發(fā)射機(jī)制取得An notation中設(shè)置 得全部?jī)?nèi)容。在Class類中存在以下幾種與Ann o ta t ion操作有關(guān)得方法: No. 方法 類型 描述 1 public A getAn no tati on( Cl ass annotationciass) 如果一個(gè)元索中存在注釋如取得全部注釋 2 public An notation ( getAnnctatlonsO 普通 返回此元素上的所有注禪 3 public An notation getDeclaredAn notation $()

47、 普通 返回宜掛存放在此元索上的所有注釋 4 public boolean isAnnotation) 普通 判斷元素是否表示一個(gè)注釋 5 public boolean isAnnotationPresent(C1 ass。/數(shù)據(jù)庫(kù)中字段得類型 /該注解指明數(shù)據(jù)庫(kù)中表得名稱 Tar g et ( v a 1 u e =E1 e m e n t Type. TYPE) Ret e n tion(val u e =Re t ent i o nPol icy. RUNT 1 ME) interfa c e TableAn n otatio n public S t ring ta b I e Nam

48、e () ;/數(shù)據(jù)庫(kù)中表得名稱 Tabl e An not a t ion (tableName=M stude n C ) / 表名稱為 s tudent c I as s Student /對(duì)應(yīng)表st u dent中字段名sname,類型v arch a r C o 1 u mn A nnot a tion(colum n N a me= H s n am e , d b ty p e=dbType、v a rchar) “priv a t e Stri n g n a me; 。/ /對(duì)應(yīng)表student中字段名sag e,類型num be r oC o lumnAn n otati o

49、n ( c ol u mnN a m e =5 s a g e* d b ty p c=dbType、n u mbc r ) pr i v a te in t age: p u bl i c S t ud e n t (St r i ng name, int a ge) 4hiSx name = name; th i s、a ge =age; J publi c String get Nam e () return name; ) public void s e tN a m e (S t ri ng n am e ) 。 t h is. name = n a m e 。p lib 1 ic int get Age() return ag e : J public v o id setAge(i n t age) ahis、age = ag e : cla s s ORMHc I p /把對(duì)象轉(zhuǎn)換為相應(yīng)得sql語(yǔ)句插入到數(shù)據(jù)庫(kù)中 p u blic void insert (Ob j e c t t a ble) oStringB u ilder sb = n e w Str in gB u ilde r(); sb. append(ni n ser t into H); 。/ /獲得對(duì)象得Cla s s實(shí)例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論