粗淺看java反射機(jī)制-編程開發(fā)技術(shù)_第1頁
粗淺看java反射機(jī)制-編程開發(fā)技術(shù)_第2頁
粗淺看java反射機(jī)制-編程開發(fā)技術(shù)_第3頁
粗淺看java反射機(jī)制-編程開發(fā)技術(shù)_第4頁
粗淺看java反射機(jī)制-編程開發(fā)技術(shù)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、粗淺看java反射機(jī)制-編程開發(fā)技術(shù)粗淺看java反射機(jī)制原文出處:吳士龍jave?反射是java被視為動(dòng)態(tài)(或準(zhǔn)動(dòng)態(tài))語言的一個(gè)關(guān)鍵性質(zhì)。這個(gè)機(jī)制允 許程序在運(yùn) 行時(shí)透過rcflcction apis取得任何一個(gè)已知名稱的class的內(nèi) 部信息,包括其 modifiers (諸如 public, static 等)、superclass (例 如 object)、實(shí)現(xiàn)之 interfaces (例如 cloneable),也包括 fields 和 methods的所有信息,并可于運(yùn)行吋改變fields內(nèi)容或喚起methods。java反射機(jī)制容許程序在運(yùn)行時(shí)加載、探知、使用編譯期間完全未知的

2、 classcso換言z, java可以加載一個(gè)運(yùn)行時(shí)才得知名稱的class,獲得其完 整結(jié)構(gòu)。jdk 中提供的 reflection apijava 反射相關(guān)的 apt 在包?java. lang, reflect?中,jdk 1.6. 0 的 reflect 包 如下圖:iava.la na.refloct »annotteciefementgenerfcarravtvoepafametenzed 丁yoewi烘gnftype真acce$idleo0ectconstructormethoamodifierproxyrenecrpenrussio ninvoc ati on t 3

3、 r qe texc epti onmart ormeaparametenzea t yoeexcepticin undeclarea t hrcwableexc eotion錯(cuò)誤gen erii si qn aturef ormate rrormember接i i該接i【可以獲取有關(guān)類成員(域或者方法)后者構(gòu)造函數(shù)的信息。accessibleobject 類 該類是域(field)對(duì)象、方法(method)對(duì)象、構(gòu)造函數(shù)(constructor)對(duì)象 的基 礎(chǔ)類。它提供了將反射的對(duì)象標(biāo)記為在使用時(shí)取消默認(rèn)java語言訪問控 制檢 查的能力。array類?提供動(dòng)態(tài)地生成和訪問java數(shù)組的方法

4、。constructor類? ?捉供一個(gè)類的構(gòu)造函數(shù)的信息以及訪問類的構(gòu)造函數(shù)的接 口。field類??提供一個(gè)類的域的信息以及訪問類的域的接口。method類??提供一個(gè)類的方法的信息以及訪問類的方法的接口。modifier類?提供了 static方法和常量,對(duì)類和成員訪問修飾符進(jìn)行解碼。proxy?類??提供動(dòng)態(tài)地生成代理類和類實(shí)例的靜態(tài)方法。java反射機(jī)制提供了什么功能?java反射機(jī)制提供如下功能:在運(yùn)行吋判斷任意一個(gè)對(duì)象所屬的類在運(yùn)行吋 構(gòu)造任意一個(gè)類的對(duì)象在運(yùn)行時(shí)判段任意一個(gè)類所具有的成員變量和方法在運(yùn)行時(shí)調(diào)用任一個(gè)對(duì)彖的 方法在運(yùn)行時(shí)創(chuàng)建新類對(duì)彖在使用java的反射功能吋,基木

5、首先都要獲取類的class對(duì)象,再通過class 對(duì)象獲取其他的對(duì)象。這里首先定義用于測(cè)試的類:<span style="font-size:18px;">classtypepublicintpublntfield;publicstring pubstringfield;privateintprvintficld;publictype() log("default constructor");type (intargl, string arg2) publntfield = argl;pubstringfield = arg2; 13log(

6、c on st rue tor with parameters'7) ; 15publicvoidsctintfield(intval) this.prvlntfield = val; 19publicintgetlntfield() returnprvintfield; privatcvoidlog(string msg) system, out. println(z,type:,z+ msg);</span><span style=z,font-size: 18px;>classextendtypeextendstypepublicintpublntextc

7、ndficld;publicstring pubstringextendfield; privateintprvintextendfield;<span style二氣hite-space:prez,> </span>publ icextendtype() log(z/default constructor'7);extendtype(intargl, string arg2) publntextendfield = argl;pubstringextendfield 二 arg2;log (constructor wi th parameters'7)

8、; publicvoidsetlntextendfield(intfield7) this. prvlntextendfield = field7;publicintgettntextendfield() returnprvtntextendfield;privatevoic!log(string msg) system, out println(extendtype:+ msg); </span>1、獲取類的class對(duì)象class類的實(shí)例表示正在運(yùn)行的jew"應(yīng)用程序中的類和接口。獲取類的class 對(duì)象有多種方式:調(diào)用 boolean varl = true; ge

9、tclass運(yùn)用class語法 運(yùn)用 static method class. forname() class<?> classtype2 = var1.getclass();system, out. printin(classtype2);輸岀:class java, la ng. boolea nclass<?> classtype4 二 boolean.class; system.out.printin(classtype4);輸出:class java .lang. boolca nclass<?> classtype5 = classfornani

10、e( ujava.1 ang.boolean” );system. out. printin(classtype5);輸出:class java, la ng. boolea n運(yùn)用 class<?> classtype3 二 boolean. typeprimitivc wrapper classes ?的 type 語法這里 返回的 是原生 類型,和boolean, class返回的不同system, out. printin(classtype3);輸岀:boolean2、獲取類的fields可以通過反射機(jī)制得到某個(gè)類的某個(gè)屬性,然后改變對(duì)應(yīng)于這個(gè)類的某個(gè)實(shí)例的 該展性值。j

11、ava的class<t>類提供了幾個(gè)方法獲取類的展性。public?field?getfield (string?name)返冋一個(gè)field對(duì)彖,它反映此?class對(duì)彖所表示的類或接口的指定公共成員 字段publ ic field getfields ()返回一個(gè)包含某些field對(duì)彖的數(shù)組,這些對(duì)彖反映此?class對(duì)象所表 示的 類或接口的所有可訪問公共字段public?field?getdeclared field(string?name)返冋一個(gè)field對(duì)象,該對(duì)象反映此?class對(duì)象所表示的類或接口的指定已聲 明字段public field gctdeclarcd

12、 fields() 返回field對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此class對(duì)象所表示的類或接口 所聲明的所有字段<span style=,/font-size: 18px;z,>class<?> classtype = extendtype. class; /使用getfields獲取屬性field fields = classtypegetfields();for (field f : fields)system, out. println(f);system, out. println();/ 使用 getdcclarcdficlds 獲取屬性fields 二 cl

13、asstype. getdeclaredfie ids ();for (field f : fields)system, out. println(f);</span>輸出:public int com. quincy. extendtype. pubtntextendfieldpublic java. lang. string com. quincy. extendtype. pubstringextcndficld public int com. quincy. type. publntfieldpublic java.lang. string com. quincy. typ

14、e. pubstringfieldpublic int com. quincy. extendtype. publntextendfieldpublic java. iang. string com. quincy. extendtype. pubstringextendfield private int com. quincy. extendtypc. prvintextendficld可見 getfields 和 getdeclaredfields 區(qū)別:<span style二font-size:18px;public methodgetmethod(string name, cl

15、ass<?>. parameterty pes)public method getmethods ()public methodgetdeclared method(stringname, class<?>.parameterty pes)public method gctdcclarcd methods()</span>getfields返回的是中明為public的屬性,包括父類中定義,getdeclaredfields返冋的是指定類定義的所有定義的屬性,不包扌舌父類的。3、獲取類的method通過反射機(jī)制得到某個(gè)類的某個(gè)方法,然后調(diào)用對(duì)應(yīng)于這個(gè)類的某個(gè)實(shí)

16、例的該方 法class<t>類捉供了幾個(gè)方法獲取類的方法。<span style二font-size:18px;">public methodgetmethod(string name, class<?>. parameterty pes)public method getmethods()public methodgetdeclared method(stringname, class<?>parameterty pes)public method getdeclared methods()</span>返冋一個(gè)metho

17、d對(duì)象,它反映此class對(duì)象所表示的類或接口的指定公共成 員方法;返回一個(gè)包含某些method對(duì)象的數(shù)組,這些對(duì)彖反映此class對(duì)彖所表 示的 類或接口(包描那些由該類或接口聲明的以及從超類和超接口繼承的那 些的類 或接口)的公共member方法;返回一個(gè)method對(duì)象,該對(duì)象反映此class對(duì)象所表示的類或接口的指定已 聲明方法;返回method對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此class對(duì)象表示的類或接口聲 明的所有方法,包扌舌公共、保護(hù)、默認(rèn)(包)訪問和私有方法,但不包扌舌繼承 的方法。<span style二"font-size: 18px;>/ 使用 getm

18、ethods 獲取函數(shù)class<?> classtypc = extcndtypc. class;method methods = classtype. getmethods();for (method m : methods)5 system, out. println(m);system, out. printlno ;/ 使用 getdeclaredmethods 獲取函數(shù)methods = classtype. getdeclaredmethods();for (method m : methods) system, out. println(m);</span&g

19、t;輸川l:public void com. quincy. extcndtypc. sctlntextcndficld(int) public int com. quincy. extendtype. getlntextendfield() public void com.quincy. type. setlntfield(int)public int com. quincy. type, getlntfield()public final native void? java, lang. object, wait(long)? throws java. lang. interruptede

20、xceptionpublic final void ? java, lang. object, wait () ?throwsjava.lang. interruptedexceptionpublic final void ? java. lang. object, wait (long, int) throwsjava. lang. interruptedexceptionpublic boolean java. lang. object, equals(java. lang. object) public java.lang. string java.lang. objccttostrin

21、g() public native int java. lang. object. hashcode ()public final native java. lang. class java. lang. object.getclass() public final n ative void java, la ng. object .n otify()publ ic final n ative void java, la ng. objec t.notif yall() private void com. quincy. extcndtypc. log(java. lang. string)

22、public void com. quincy. extendtype. setlntextendfield(int) public int com. quincy. extendtype. getlntextendfield() 4、獲取類的 constructor 通過反射機(jī)制得到某個(gè)類的構(gòu)造器,然后調(diào)用該構(gòu)造器創(chuàng)建該類的一個(gè)實(shí)例 class<t>類提供了兒個(gè)方法獲取類的構(gòu)造器。public constructor< t>返回一個(gè)constructor對(duì)象,它反映此class對(duì)象所表示的類的指定公共構(gòu) 造方法<span style二"font-siz

23、e:18px;">getconstruct or(class<?> parametertyp es)publ icconstruetor?>getconstruct ors ()</span>返回一個(gè)包含某些constructor對(duì)象的數(shù)組,這些對(duì)象反映此class對(duì)象所表示的類的所冇公共構(gòu)造方法<span style二font-size:18px;>public constructor< t>getdeclaredconstructor(class<?>. parametertyp es)</span&g

24、t;返冋一個(gè)constructor對(duì)象,該對(duì)象反映此class對(duì)象所表示的類或接口的 指定構(gòu)造方法<span style二font-sie: 18px;,z>publ icconstruetor?>getdeclaredc onstructors()</span>返回constructor對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此class對(duì)象表示的類聲 明的所有構(gòu)造方法。它們是公共、保護(hù)、默認(rèn)(包)訪問和私有構(gòu)造方法<span style二font-size: 18px;">/ 使用 getconstructors 獲取構(gòu)造器constructor&l

25、t;?> constructors 二 classtype. getconstructors();for (constructor<?> m : constructors)system, out. println(m);system, out. printin();/ 使用 getdeclaredcons true tors 獲取構(gòu)造器constructors 二 classtype. getdeclaredconstructors ();for (constructor<?> m : constructors) system, out. pri ntln (m)

26、;輸出:publiccom quincy. extendtype()publiccom. quincy. extendtype ()com. quincy. extendtype(int, java. lang. string)<span style二font-family:arial, holvetica, semsscrif; background-color: rgb(255, 255,255) ;,z>?</spanx/span>5、新建類的實(shí)例通過反射機(jī)制創(chuàng)建新類的實(shí)例,有幾種方法可以創(chuàng)建新類的實(shí)例,調(diào)用無自變量 、調(diào)用類的class對(duì)象的newlnstanc

27、e方法,該方法會(huì)調(diào)用對(duì)象的默認(rèn)ctor 構(gòu)造器,如果沒有默認(rèn)構(gòu)造器,會(huì)調(diào)用失敗.<span style二font-size:18px;>cldss?> classtype = extendt)pe. class;object inst 二 classtype. newlnstance(); system, out. printin (inst);</span>輸出:type:default construetor extendtype:default constructorcom.quincy. extendtyped80be3 、調(diào)用默認(rèn)constructor對(duì)

28、彖的ncwlnstancc方法<span style二font-size:18px;>class?> classtype = extendtype. class;constructor?constructorl = classtype.getconstructor ();object inst 二 constructorl newlnstance();system, out. println(inst);/span>輸出:type:default constructor extendtype:default constructor com. quincy. extend

29、type1006d75 、調(diào)用帶參數(shù)constructor對(duì)象的newlnstance方法<span style=z,font-size: 18px;,z>constructor?> constructor2 = classtype. getdcclarcdconstructor (int. class, string, class);object inst = constructor2. newlnstance(1, 123); system out. println(inst);</span>輸岀:type:default constructor extend

30、type:constructor with parameters com. quincy. extendtype15e83f96、調(diào)用類的函數(shù)通過反射獲取類method對(duì)象,調(diào)用field的invoke方法調(diào)用函數(shù)。<span style二font-size:18px;>cldss?> cldsstype = extendt)pe. class; object inst 二 classtype. newlnstance();method logmethod = classtype. <strong>getdeclaredmethod</strong>

31、("log", string, class);logmethod. invoke(inst,test);輸岀:type:defauit construetorextendtype:default constructor<f0nt color=#ff0000>class com. quincy. classt can not accessa member ofclasscom. quincy. extendtype wi th modif iersz/pri vatez,</f0nt><f0nt color=#ff0000>上面失敗是由于沒

32、有權(quán)限調(diào)用private函數(shù),這里需要 設(shè)置accessible 為 true;</f0nt>class<?> classtype = extendtype. class;object inst = classtype. newlnstance();methodlogmethod二 classtype. getdeclaredmethod (log77,string. class);<f0nt color=#ff0000>logmethod. setaccessible(true);</f0nt> logmethod. invoke(inst,

33、"test");/span>7、設(shè)置/獲取類的屬性值通過反射獲取類的field對(duì)彖,調(diào)用field方法設(shè)置或獲取值<span style二font-size:18px;>class?> classtype = extendtype. class; object inst = classtype newlnstance();field intfield = classtypc. gctficld("publntextcndficld"); intfield. <strong>setint</strong>(i

34、nst, 100);intvalue = intfield.<str0ng>getint</str0ng>(inst);</span>動(dòng)態(tài)創(chuàng)建代理類?代理模式:代理模式的作用二為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。 代理模式的角色:抽象角色:聲明真實(shí)對(duì)象和代理對(duì)象的共同接口代理角色:代理角色內(nèi)部包含 有真實(shí)對(duì)彖的引用,從而可以操作真實(shí)對(duì)象。真實(shí)角色:代理角色所代表的真實(shí) 對(duì)象,是我們最終要引用的對(duì)象。?動(dòng)態(tài)代理:java. lang, re fleet. proxyproxy提供用于創(chuàng)建動(dòng)態(tài)代理類和實(shí)例的靜態(tài)方法,它還是由這些方法創(chuàng)建的 所冇動(dòng)態(tài)代理

35、類的超invocationhandler是代理實(shí)例的調(diào)用處理程序 實(shí)現(xiàn)的接 口,每個(gè)代理實(shí)例都具有一個(gè)關(guān)聯(lián)的調(diào)用處理程序。對(duì)代理實(shí)例調(diào)用方法時(shí),將 對(duì)方法調(diào)用進(jìn)行編碼并將其指派到它的調(diào)用處理程序的invoke方法。動(dòng)態(tài)proxy是這樣的一種類:它是在運(yùn)行生成的類,在生成時(shí)你必須提供一組interface給它,然后該class 就宣稱 它實(shí)現(xiàn)了這些interface。你可以把該class的實(shí)例當(dāng)作這些 interface中的任何一個(gè) 來用。當(dāng)然,這個(gè)dynamicproxy其實(shí)就是一個(gè) proxy,它不會(huì)替你作實(shí)質(zhì)性的工作,在生成它的實(shí)例時(shí)你必須提供一個(gè) handler,由它接管實(shí)際的工作。在使

36、用動(dòng)態(tài)代理類時(shí),我們必須實(shí)現(xiàn)invocbtionlkrndlcr接i i步驟:<span style二font-size: i8px;>/1、定義抽象角色 public interface subject public void request();/2、定義真實(shí)角色public class realsubject implements subject ©overridepublic void request() / todo auto-generated method stub systemout.printin("realsubject"); /3

37、、定義代理角色public class dynamicsubject implemenls invocalionhandler private objectsub;public dmamicsubject(object obj) this, sub = obj;©overridepublic object invokc(0bjcct proxy, met hod method, object args) throws throwable/ todo auto-genera ted method stub system, out. println(method: + met hod +

38、 args: + args); method, invoke(sub, args);return null;/4、通過 proxy. newproxylnstance 構(gòu)建代理對(duì)象realsubject reaisub 二 new realsubject () ; invocationhand 1 er handler = new dynamicsubject(realsub); class<?> classtype 二 handler. getclasso ; subject sub 二(subject)proxy, ncwproxyinstemco(classtype. gct

39、classloadcr(), realsub.getclass () getlnterfaces(), handler);system out. println(sub getclass();/5、通過調(diào)用代理對(duì)象的方法去調(diào)用真實(shí)角色的方法。 sub. request () ;/span>輸出:class $proxyo新建的代理對(duì)象,它實(shí)現(xiàn)指定的接口method:public ? abstract ? voiddynamicproxy. subject. request(), args:nullrealsubject調(diào)用的真實(shí)對(duì)象的方法本篇文章依iii采用小demo來說明,因?yàn)槲沂冀K覺

40、的,案例驅(qū)動(dòng)是最好的,要不 然只看理論的話,看了也不懂,不過建議大家在看完文章z后,在回過頭去看看 理論,會(huì)有更好的理解。下面開始正文?!景咐?通過一個(gè)對(duì)象獲得完整的包名和類名<span style二font-sizc: 18px;,z>packagcrcflcct;/classdemo*通過-個(gè)對(duì)象獲得完整的包名和類名/other codes.classhello publicstaticvoidmain (string args) demo demo=newdemo();system out. println(demo. getclass (). getname (); <

41、;/span>【運(yùn)行結(jié)果】:reflect. demo添加一句:所冇類的對(duì)象其實(shí)都是class的實(shí)例。【案例2】實(shí)例化class類對(duì)彖<span style二font-size: 18px;z,>packageref 1 ect; classdemo/other codes classhello publicstaticvoidmain(string args) class<?> dcmol=null;class<?> demo2=null;class<?> demo3=nul1;try 一般盡量采用這種形式 demol=class. fo

42、rname("reflect. demo);catch (exception e) e. printstacktrace();demo2=newdcnio (). getclass ();demo3=demo. class;system, out. printin(z,類名稱 +demol. getname(); system, out. printin (類名稱 +demo2 getname (); system, out. printin(類名稱 "+dcmo3 getname (); </span>【運(yùn)行結(jié)果】:類名稱?reflect. demo類名稱?r

43、eflect. demo類名稱?reflect. demo【案例3通過class實(shí)例化具他類的對(duì)象?通過無參構(gòu)造實(shí)例化對(duì)象<span style二font-size: 18px; z,>package reflect;class person!public string getname()return name;public void setname(string name) this, name = name; public int getage() return age;public void setage(intage) this.age 二 age; ©overr

44、idepublic string tostring()return" +this. name+z, +this. 3gc+;private string name;private int age;class hellopublic static void main(string args) class<?> demo=nul1; trydemo二class. forname (z,reflect. persort);catch (exception e) e.printstacktrace();person per=nul1; tryper= (person)demo.

45、newlnstance();catch (instantiationexception e) / todo auto-generated catch block e.printstacktrace();catch(illegalaccessexception e) / todo auto-generated catch block e. printstacktrace();per. setname (/zrollen); per. setage (20) ; system, out. printin (per);</span>【運(yùn)行結(jié)果】:rollcn20但是注意一下,當(dāng)我們把?p

46、erson屮的默認(rèn)的無參構(gòu)造函數(shù)取消的時(shí)候,比如自 己定義只定義一個(gè)有參數(shù)?的構(gòu)造函數(shù)之后,會(huì)出現(xiàn)錯(cuò)誤:比如我定義了一個(gè)構(gòu)造函數(shù):<span style二font-sie:18px;> public person(string name, intage) this.age二age;this. name=name;</span>然后繼續(xù)運(yùn)行上面的程序,會(huì)出現(xiàn):spanstyle二font-size: 18px;z,>java. lang. instantiationexccption:reflect. personatjava. lang. class. newin

47、stanceo(class, java:340)atjava. lang. class. newtnstance(class, java:308)atreflect. hello. main(hello, java:39)exceptioninthrcad/zmainz,java. lang. nullpointcrexccptionatreflect. hello. main(hello. java:47)</span>所以大家以后再編寫使用class實(shí)例化其他類的對(duì)象的吋候,一定要自己定義 無參的構(gòu)造函數(shù)【案例】通過class調(diào)用其他類中的構(gòu)造函數(shù)(也可以通過這種方式通過cla

48、ss創(chuàng)建其他類的對(duì)象)<span style二font-size:18px;>p3ckage reflect;import java.lang, reflect. constructor;class personpublic person() publicperson(string name)this. name=name;public person(intage)this. age=age;public pcrson(string namc, inteigc) this, age二age;this. name=name;publicstri ng getname() return

49、name;ijpublicintgetage() returnage;©override+this. age+,z publicstring tostringo return"+this. name+private string name;private int age;class hellopublic static void main(string args) class<?> demo二null;try demo二class. forname (zzreflect. person,z);catch (exception e) e. printstacktr

50、ace ();pcrson perl二null;person per2=null;person per3=null;person per4二null;/取得全部的構(gòu)造函數(shù)constructor<?> cons 二demo. gctconstructorso ; try perl= (person)cons0. newlnstance();per2= (person)cons 1 . newlnstance(/zrollen/z);per3二(person)cons2. newtnstanee(20);pcr4= (pcrson)cons3 ncwlnstancc(rollen&qu

51、ot;, 20);catch (exception e) e.printstacktrace();system, out. println(perl); system, out. println(per2); system out. println(per3); system out. println(per4); </span>【運(yùn)行結(jié)果】:nullorollcnonull20rollen20【案例】返回一個(gè)類實(shí)現(xiàn)的接口:<span style二font-size: 18px; z,>package reflect; intcrfacechinapublicstati

52、cfinalstring name二rollen;publicstatic int age=20; publicvoidsaychina();publicvoidsayhello(string name, intage); class person implements china public person() publicperson (string sex)this, sex二sex;publicstring gctsex()returnsex;publicvoidsetsex(string sex)this, sex = sex; 22©override publicvoid

53、saychina() system, out. println("hello , chinaz,);©override publicvoidsayhello (string name, intage)system out. println(name+/z /z+age);privatestri ng sex;class hello publicstaticvoidmain(string args) class<?> demo二null;try demo二cl ass. forname (z/ref 1 ect. person); catch (exception

54、 e) e. printstacktrace();保存所有的接口class<?> intcs=dcmo. gctlntcrfaccs() ; for(inti 二0; i < intos> longth; i+) system, out. printin(,z實(shí)現(xiàn)的接口 +intesi getname();</span>【運(yùn)行結(jié)果】:實(shí)現(xiàn)的接口?reflect. china(注意,以下幾個(gè)例子,都會(huì)用到這個(gè)例子的?person類,所以為節(jié)省篇幅,此 處不再粘貼?person的代?碼部分,只粘貼主類?hello的代碼)【案例】:取得其他類小的父類<spa

55、n style二font-size:18px;>class hellopublic static void main(string args) class<?> demo二null;try demo二class. forname("reflect. person");catch (exception e) e. printstacktrace ();取得父類class<?> temp二demo. getsuperclass ();system, out. printin(,z繼承的父類為:"+temp. getname (); <

56、;/span>【運(yùn)行結(jié)果】 繼承的父類為:?java. lang. object【案例】:獲得其他類屮的全部構(gòu)造函數(shù) 這個(gè)例子需要在程序開頭添加 import java. lang, reflect. *;然后將主類編寫為:<span style二font-size:18px;>class hellopublic static void meiin( str in g args) class<?> demo=null; try demo二class. fortame("reflect. person);catch(exception e) e. prin

57、tstacktrace ();constructor<?>cons=demo. getconstructors ();for(inti 二0; i < cons. length; i+) system, out. printin(構(gòu)造方法: "+consi);</span>【運(yùn)行結(jié)果】:構(gòu)造方法:publ ic?reflect. person ()構(gòu)造方法:publicrcf lcct. person (java. lang. string)但是細(xì)心的讀者會(huì)發(fā)現(xiàn),上面的構(gòu)造函數(shù)沒右?public或者?private這一類的修 飾符下面這個(gè)例了我們就來獲取修飾符<span style二font-size:18px;> class hello構(gòu)造方法publicstatievoidmain(string args) class<?> demo=null; try demo二class. fortame("reflect. person);catch(exception e) e. printstacktrace();constructor<?>cons=demo. getc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論