異常處理和反射_第1頁
異常處理和反射_第2頁
異常處理和反射_第3頁
異常處理和反射_第4頁
異常處理和反射_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

關(guān)于異常處理和反射教學(xué)目標理解異常的概念,熟悉異常的分類、Exception類、Java的異常處理機制及聲明拋出異常、自定義異常的方法;熟悉log4j的基本用法;理解反射的概念,熟悉反射中常用類的基本用法。重點:異常、反射的概念,log4j的基本用法,反射中常用類的基本用法,難點:異常、反射的概念,log4j的基本用法,反射中常用類的基本用法第2頁,共54頁,2024年2月25日,星期天1、異常處理在編寫、運行程序時,會碰到許多錯誤,也有不同的處理方式publicclassA{ publicstaticvoidmain(String[]args){

intarray[]={10,20,30}; inti;

for(i=0;i<=3;i++) System.out.println(array[i]); System.out.println("程序運行完畢!"); }}(1)引例程序運行結(jié)果:102030Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:3atA.main(A.java:6)intarray[]={10,20,30};inti;for(i=0;i<=3;i++) System.out.println(array[i]);第3頁,共54頁,2024年2月25日,星期天(2)異常的概念概念:異常是程序執(zhí)行過程中遇到特殊條件時發(fā)生的不正常事件。(英文:exception,意思:例外)異常事件將會中斷程序的正常執(zhí)行過程;Java具有可確保在程序內(nèi)處理異常的內(nèi)置功能,增加健壯性。Java的一個重要觀點:一切皆對象。對異常的處理也不例外,定義了異常類,并通過異常類的實例來表示異常事件;對異常的處理機制也成為判斷一種語言是否成熟的標準;好的異常處理機制會使程序員更容易寫出健壯的代碼,防止代碼中Bug的蔓延。第4頁,共54頁,2024年2月25日,星期天ArithmeticException:除數(shù)為0時的算術(shù)異常NullPointerException:沒有給對象分配內(nèi)存空間,而又去訪問對象的空指針異常FileNotFoundException:找不到文件的異常ArrayIndexOutOfBoundsException:數(shù)組元素下標越界異常NegativeArraySizeException:數(shù)組長度為負數(shù)異常NumberFormatException:數(shù)據(jù)格式不正確異常ClassNotFoundException:找不到相應(yīng)類的異常……異常的例子:第5頁,共54頁,2024年2月25日,星期天這些異常類位于java.lang包中第6頁,共54頁,2024年2月25日,星期天

Java把程序運行過程中發(fā)生的錯誤分為兩類:錯誤(Error):JVM系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況異常(Exception):

其它因編程錯誤或偶然的外在因素導(dǎo)致的一般性問題。

Throwable類的父類是Object,Throwable類有兩個直接類:Error和Exception。只有Throwable類的子類才可以作為一個異常被拋出。具體如下圖所示:(3)異常的分類第7頁,共54頁,2024年2月25日,星期天這類錯誤出現(xiàn)時,除了終止程序外別無選擇。所以,不應(yīng)該拋出。這類異常是由于編程者的錯誤引發(fā)的,只要編程時加以判斷,就可以避免。這類異常的出現(xiàn)是因為意外情況造成的(程序可能很好),是捕獲的重點。第8頁,共54頁,2024年2月25日,星期天異常類的層次第9頁,共54頁,2024年2月25日,星期天常見的異常受檢(checked)異常:是指編譯器要求必須處置的異常,即程序在運行時由于外界因素造成的一般性異常未找到指定名稱類的異常:java.lang.ClassNotFoundException訪問不存在文件的異常:java.io.FileNotFoundException操作文件時發(fā)生的異常:java.io.IOException操作數(shù)據(jù)庫時發(fā)生的異常:java.sql.SQLException第10頁,共54頁,2024年2月25日,星期天非受檢(unchecked)異常:是指編譯器不要求強制處置的異常。一般是指因設(shè)計或?qū)崿F(xiàn)方式不當(dāng)導(dǎo)致的問題錯誤的類型轉(zhuǎn)換異常:java.lang.ClassCastException組下標越界異常:java.lang.ArrayIndexOutOfBoundsException空指針訪問異常:java.lang.NullPointerException除零溢出異常:java.lang.ArithmeticException第11頁,共54頁,2024年2月25日,星期天構(gòu)造方法:publicException()publicException(Strings)

說明:字符串s是對該異常的描述常用方法:publicStringtoString():返回當(dāng)前異常對象信息的描述;publicStringgetMessage():返回當(dāng)前異常對象信息的詳細描述;publicvoidprintStackTrace():用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容(4)Exception類的構(gòu)造方法和一般方法第12頁,共54頁,2024年2月25日,星期天Java提供的異常處理機制有兩種:使用try…catch捕獲異常:將可能產(chǎn)生異常的代碼放在try語句中進行隔離,如果遇到異常,程序會停止執(zhí)行try塊的代碼,跳到catch塊中進行處理使用throws聲明拋出異常:當(dāng)前方法不知道如何處理所出現(xiàn)的異常,該異常應(yīng)由上一級調(diào)用者進行處理,可在定義該方法時使用throws聲明拋出異常(5)Java的異常處理機制第13頁,共54頁,2024年2月25日,星期天Java的異常處理機制優(yōu)點:將異常處理代碼和正常的業(yè)務(wù)代碼分離,提高了程序的可讀性,簡化了程序的結(jié)構(gòu),保證了程序的健壯性;將不同類型的異常進行分類,不同情況的異常對應(yīng)不同的異常類,充分發(fā)揮類的可擴展性和可重用性的優(yōu)勢;可以對程序產(chǎn)生的異常進行靈活處理,如果當(dāng)前方法有能力處理異常,就使用try…catch捕獲并處理;否則使用throws聲明要拋出的異常,由該方法的上一級調(diào)用者來處理異常。第14頁,共54頁,2024年2月25日,星期天//A.java的改進版本publicclassA2{ publicstaticvoidmain(String[]args){ intarray[]={10,20,30}; inti;

try{ for(i=0;i<=3;i++) System.out.println(array[i]);

}catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("異常簡要說明:"+e.toString()); System.out.println("異常詳細說明:"+e.getMessage()); System.out.println("發(fā)生異常位置:"); e.printStackTrace(); } System.out.println("程序運行完畢!"); }}拋出異常捕獲異常處理異常第15頁,共54頁,2024年2月25日,星期天程序運行結(jié)果:102030異常簡要說明:java.lang.ArrayIndexOutOfBoundsException:3異常詳細說明:3發(fā)生異常位置:java.lang.ArrayIndexOutOfBoundsException:3atA2.main(A2.java:8)程序運行完畢!

從運行結(jié)果可以看出,增加了try…catch…結(jié)構(gòu)后,程序的執(zhí)行過程有明顯不同:當(dāng)出現(xiàn)異常時,捕獲后并進行相應(yīng)處理,輸出相關(guān)信息。 更重要的是程序得以順利執(zhí)行,并沒有中途退出。第16頁,共54頁,2024年2月25日,星期天(6)try…catch…finally語句格式:

try{ ...... //可能產(chǎn)生異常的代碼}catch(ExceptionName1e1){ ...... //當(dāng)產(chǎn)生ExceptionName1型異常時的處理語句}catch(ExceptionName2e2){...... //當(dāng)產(chǎn)生ExceptionName2型異常時的處理語句}[finally{...... //無論是否拋出異常都會執(zhí)行的語句,即使在catch塊中有return語句,一般用來做收尾工作,如:關(guān)閉文件

}]第17頁,共54頁,2024年2月25日,星期天執(zhí)行流程:第18頁,共54頁,2024年2月25日,星期天代碼片段: floatmyFloatArray[]=newfloat[10]; inti; if(argv.length==0)

System.out.println("\n\tUsage:CheckedExceptionsDemointvalue\n"); else{

try{ i=Integer.parseInt(argv[0]);

myFloatArray[i-1]=(float)11.234;

System.out.println(myFloatArray[i]);

}catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("\n\tInputvaluecannotexceed10\n"); return;

}catch(NumberFormatExceptione){ System.out.println("\n\tInputvalueshouldbeaninteger\n"); return;

} }可能出錯第19頁,共54頁,2024年2月25日,星期天importjava.io.*;publicclasstry_catch_finally{ publicstaticvoidmain(String[]args){ RandomAccessFilefile; //隨機存取文件對象

try{ file=newRandomAccessFile(“F:\\abc.txt","r"); for(inti=0;i<20;i++)

System.out.print((char)file.readByte());//讀取1個字節(jié)并輸出 file.close();

}catch(FileNotFoundExceptione1){ e1.printStackTrace();

}catch(IOExceptione2){ e2.printStackTrace();

}finally{ System.out.println("不管是否有異常,此語句都要執(zhí)行");

} }}程序運行結(jié)果:(文件不存在時)java.io.FileNotFoundException:abc.txt(系統(tǒng)找不到指定的文件。)atjava.io.RandomAccessFile.open(NativeMethod)atjava.io.RandomAccessFile.<init>(RandomAccessFile.java:212)atjava.io.RandomAccessFile.<init>(RandomAccessFile.java:98)attry_catch_finally.main(try_catch_finally.java:6)不管是否有異常,此語句都要執(zhí)行程序運行結(jié)果:(文件存在,但長度<20字節(jié)時)Goodmorning!java.io.EOFExceptionatjava.io.RandomAccessFile.readByte(RandomAccessFile.java:591)attry_catch_finally.main(try_catch_finally.java:8)不管是否有異常,此語句都要執(zhí)行第20頁,共54頁,2024年2月25日,星期天 至于說去捕獲什么類型的異常,這要依賴于以下兩方面:編程經(jīng)驗:多讀、多寫查看類的方法說明(javaAPI文檔)例如:publicstaticintparseInt(String

s)throwsNumberFormatException

publicRandomAccessFile(String

name,String

mode)throwsFileNotFoundExceptionpublicfinalbytereadByte()throwsIOException第21頁,共54頁,2024年2月25日,星期天 請注意:當(dāng)有多個catch子句時,首先捕獲最具體的異常,然后捕獲較一般的異常,直到捕獲所有異常,例如:try{ ……} catch(Exceptione){

……}

catch(ArrayIndexOutOfBoundsExceptione){

……} catch(NumberFormatExceptione){ ……}錯誤!try{ ……} catch(NumberFormatExceptione){

……}

catch(ArrayIndexOutOfBoundsExceptione){

……} catch(Exceptione){ ……}正確!第22頁,共54頁,2024年2月25日,星期天(7)自動關(guān)閉資源的try語句格式:try(//聲明、初始化資源代碼){ //業(yè)務(wù)實現(xiàn)代碼(可能發(fā)生異常) ......} 從Java7開始,增強了try語句的功能,允許在try關(guān)鍵字后緊跟一對小括號,在小括號中可以聲明、初始化一個或多個資源,當(dāng)try語句執(zhí)行結(jié)束時會自動關(guān)閉這些資源。 這相當(dāng)于包含了隱式的finally塊,它用于關(guān)閉前面所訪問的資源。因此,自動關(guān)閉資源的try語句后面可以沒有catch塊,也可以沒有finally塊。第23頁,共54頁,2024年2月25日,星期天publicstaticvoidmain(String[]args){//自動關(guān)閉資源的try語句,JDK7.0以上才支持

try(FileInputStreamfis=newFileInputStream("zkl.txt")){//對文件的操作...}catch(IOExceptionioe){ System.out.println(ioe.getMessage()); } //包含了隱式的finally塊,fis.close()關(guān)閉資源}只有JDK版本是7.0或以上,才能使用自動關(guān)閉資源的try語句第24頁,共54頁,2024年2月25日,星期天(8)嵌套的try…catch語句即在一個try…catch語句中嵌套了另外一個try…catch語句try{Scannerscanner=newScanner(System.in);System.out.println("請輸入第1個數(shù):");//從鍵盤獲取一個字符串

Stringstr=scanner.next();//將不是整數(shù)數(shù)字的字符串轉(zhuǎn)換成整數(shù),

//會引發(fā)NumberFormatExceptionintn1=Integer.parseInt(str);try{FileInputStreamfis=new FileInputStream("zkl.txt");}catch(IOExceptionioe){System.out.println(ioe.getMessage());}第25頁,共54頁,2024年2月25日,星期天System.out.println("請輸入第2個數(shù):");//從鍵盤獲取一個整數(shù)

intn2=scanner.nextInt();System.out.println("您輸入的兩個數(shù)的商是:" +n1/n2);}catch(Exceptionex){ex.printStackTrace();}System.out.println("程序結(jié)束!");第26頁,共54頁,2024年2月25日,星期天(9)多異常捕獲從Java7開始,一個catch塊可以捕獲多種類型的異常格式:try{ //業(yè)務(wù)實現(xiàn)代碼(可能發(fā)生異常) ......}catch(異常類A[|異常類B...|異常類N]異常對象){ //多異常捕獲處理代碼}......//可以有多個catch語句其中:捕獲多種類型的異常時,多種異常類型之間使用豎杠“|”進行間隔;多異常捕獲時,異常變量默認是常量,因此程序不能對該異常變量重新賦值。第27頁,共54頁,2024年2月25日,星期天可以使用throw或throws關(guān)鍵字:使用throw拋出一個異常類對象,由相應(yīng)catch語句捕獲格式:throw異常類對象使用throws聲明拋出一個異常類序列,由上一級調(diào)用者進行處理格式:[訪問符]<返回類型>方法名([參數(shù)列表])throws異常類1[,異常類2...,異常類n]{ //方法體}(10)拋出異常第28頁,共54頁,2024年2月25日,星期天//throws子句指示哪個方法可能正在拋出異常classCar{

privatefloatspeed=0;

privatefloatMAX_V=200;

publicvoidaccelerate(floatinc)throws

MotorException{

if(speed+inc>MAX_V){

thrownewMotorException(“Theengineisbroken”);

}elsespeed+=inc;

}}問題:請問throws與throw的區(qū)別?;卮穑簍hrows是在方法聲明時,指出可能拋出的異常,而方法中的throw則是具體拋出一個異常實例。accelerate()方法拋出一個異常,這是由throws子句指定的第29頁,共54頁,2024年2月25日,星期天(11)自定義異常除了使用標準異常外,用戶還可以通過都繼承Exception或RuntimeException類定義自己的異常。classMotorExceptionextendsException{

publicMotorException(){super();}

publicMotorException(Strings){super(s);}}classCar{

privatefloatspeed=0;

privatefloatMAX_V=200;

publicvoidaccelerate(floatinc)throws

MotorException{

if(speed+inc>MAX_V){

thrownewMotorException(“theengineisbroken”);

}else{

speed+=inc;

}

}}第30頁,共54頁,2024年2月25日,星期天classpilot{

publicstaticCarcar;

publicstaticvoidmain(String

args[]){

car=newCar();

try{

for(;;)

car.accelerate(0.4f);

}catch(MotorExceptionme){

System.out.println(“Mechanicalproblem:“+me);

}

}}程序運行結(jié)果:Mechanicalproblem:MotorException:theengineisbroken第31頁,共54頁,2024年2月25日,星期天2、開源日志記錄工具log4j希望以文件記錄異常信息,甚至記錄程序正常運行的關(guān)鍵步驟信息,而不是在控制臺上輸出,這種情況該如何處理呢?使用流行的開源日志記錄工具-log4j來實現(xiàn)第32頁,共54頁,2024年2月25日,星期天日志(log)主要用來記錄系統(tǒng)運行中一些重要操作信息;便于監(jiān)視系統(tǒng)運行情況,幫助用戶提前發(fā)現(xiàn)和避開可能出現(xiàn)的問題。log4j是一個非常優(yōu)秀的開源日志記錄工具控制日志的輸出級別;控制日志信息輸送的目的地是控制臺、文件等;控制每一條日志的輸出格式。網(wǎng)址:/log4j/2.x下載log4j2.x版本jar文件(1)日志第33頁,共54頁,2024年2月25日,星期天第34頁,共54頁,2024年2月25日,星期天舉例:(2)log4j的屬性配置文件pertieslog4j.rootLogger=DEBUG,A1,F1#DEBUG,INFO,WARN,ERROR,FATALlog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-d{MM-ddHH:mm:ss}[%c]-[%p]%m%nlog4j.appender.F1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.F1.File=c:/logs/seplog4j.appender.F1.DatePattern='-'yyyy-MM-dd'.log'log4j.appender.F1.layout=org.apache.log4j.PatternLayoutlog4j.appender.F1.layout.ConversionPattern=%-d{MM-ddHH:mm:ss}[%c]-[%p]%m%n第35頁,共54頁,2024年2月25日,星期天Log4j三大組件Logger:日志類別五大級別:DEBUG、INFO、WARN、ERROR、FATALAppender:日志輸出目的地Layout:格式化輸出日志信息第36頁,共54頁,2024年2月25日,星期天Log4j配置屬性Logger格式:log4j.rootLogger=[level],appenderName,appenderName,…說明:level是日志記錄的優(yōu)先級:FATAL、ERROR、WARN、INFO、DEBUG(由高到低)例如:log4j.rootLogger=DEBUG,A1,A2優(yōu)先級為:DEBUG記錄器有兩個:A1、A2第37頁,共54頁,2024年2月25日,星期天Log4j配置屬性Appender格式:log4j.appender.appenderName=屬性值org.apache.log4j.ConsoleAppender(控制臺)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender每天產(chǎn)生一個日志文件)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件)org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)可選項:log4j.appender.appenderName.option1=value1Threshold、ImmediateFlush、Append、File、DatePattern、MaxFileSize、MaxBackupIndex第38頁,共54頁,2024年2月25日,星期天Log4j配置屬性Layout格式:log4j.appender.appenderName.layout=屬性值org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以靈活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)可選項:log4j.appender.appenderName.layout.option1=value1ConversionPattern(舉例:%-d{MM-ddHH:mm:ss}[%c]-[%p]%m%n)第39頁,共54頁,2024年2月25日,星期天Log4j配置屬性Layout-格式符號含義%p:輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL%d:輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyMMMddHH:mm:ss,SSS},輸出類似:2002年10月18日22:10:28,921%r:輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)%c:輸出日志信息所屬的類目,通常就是所在類的全名%t:輸出產(chǎn)生該日志事件的線程名%l:輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。例如:Testlog4.main(TestLog4.java:10)%x:輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像javaservlets這樣的多客戶多線程的應(yīng)用中%%:輸出一個"%"字符%F:輸出日志消息產(chǎn)生時所在的文件名稱%L:輸出代碼中的行號%m:輸出代碼中指定的消息,產(chǎn)生的日志具體信息%n:輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"輸出日志信息換行第40頁,共54頁,2024年2月25日,星期天第一步:先下載log4j所使用的JAR文件,再在項目中加入(2)如何使用log4j記錄日志第二步:在src目錄中創(chuàng)建perties文件第41頁,共54頁,2024年2月25日,星期天第三步:編寫perties,配置日志信息###設(shè)置Logger輸出級別和輸出目的地###log4j.rootLogger=debug,stdout,logfile###把日志信息輸出到控制臺###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.errlog4j.appender.stdout.layout=org.apache.log4j.SimpleLayout###把日志信息輸出到文件:jbit.log###log4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=jbit.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%l%F%p%m%n日志信息將寫到文件中指定日志輸出的文件名指定日志布局類型設(shè)置優(yōu)先級別為debug、日志被輸出到多個輸出源日志信息將寫到控制臺信息打印到System.err上指定日志布局類型優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG在此處,如果優(yōu)先級別設(shè)為info,那么使用debug方法打印的日志信息將不被輸出指定轉(zhuǎn)換模式第42頁,共54頁,2024年2月25日,星期天第四步:在程序中使用log4j記錄日志信息關(guān)鍵點:1)獲取Logger:Loggerlogger=Logger.getLogger(AClass.class);

2)調(diào)用Logger中的方法,具體如下:

publicvoiddebug(Objectmessage); publicvoidinfo(Objectmessage); publicvoidwarn(Objectmessage); publicvoiderror(Objectmessage);說明:參數(shù)message為輸出信息第43頁,共54頁,2024年2月25日,星期天publicclassTest{

privatestaticLoggerlogger=Logger.getLogger(Test11.class.getName()); publicstaticvoidmain(String[]args){ try{ Scannerin=newScanner(System.in); System.out.print("請輸入被除數(shù):"); intnum1=in.nextInt();

logger.debug("輸入被除數(shù):"+num1); System.out.print("請輸入除數(shù):"); intnum2=in.nextInt();

logger.debug("輸入除數(shù):"+num2); System.out.println(String.format("%d/%d=%d", num1,num2,num1/num2));

logger.debug("輸出運算結(jié)果:"+String.format("%d/%d=%d", num1,num2,num1/num2)); }catch(InputMismatchExceptione){

logger.error("被除數(shù)和除數(shù)必須是整數(shù)",e); }catch(ArithmeticExceptione){

logger.error(e.getMessage()); }catch(Exceptione){

logger.error(e.getMessage()); }finally{ System.out.println("歡迎使用本程序!"); } }}獲取日志記錄器記錄異常信息記錄關(guān)鍵操作步驟第44頁,共54頁,2024年2月25日,星期天運行效果展示控制臺輸出效果異常情況下輸出到控制臺的日志信息正常情況下輸出到控制臺的日志信息輸出到文件jbit.log的日志信息文件輸出效果第45頁,共54頁,2024年2月25日,星期天3、反射(Reflection)的概念在Java運行時環(huán)境中,對任意一個類,能否知道類的屬性和方法?對任一個對象,能否調(diào)用它的所有方法?答案是肯定的。Java語言的反射機制是通過Java對象動態(tài)獲取類的信息及動態(tài)調(diào)用對象的方法。Java的反射機制主要功能:在運行時判斷任意一個對象所屬的類;獲取類的信息,如類的方法、構(gòu)造方法、超類、修飾符、成員變量、常量;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理。第46頁,共54頁,2024年2月25日,星期天4、反射類反射API的基本原理:Java類和運行時對象知道關(guān)于它們自己的信息,通常用于開發(fā)復(fù)雜的應(yīng)用程序,如JavaBean、可視化開發(fā)環(huán)境、分布式調(diào)試器等。Java反射的類與包主要位于java.lang.reflect包中ObjectProxyMethodFieldArrayConstructorJava.lang.ClassJava.lang.reflect.AccessibleObject…第47頁,共54頁,2024年2月25日,星期天Object類:反射類和Java類的超類。Object類定義的getClass方法在運行時獲取Class類的對象。這個對象提供必需的反射信息。Class類:代表一個類。Field類:類的成員變量。Method類:類的方法。Constructor類:類的構(gòu)造方法。Array類:提供動態(tài)創(chuàng)建數(shù)組及訪問數(shù)組元素的靜態(tài)方法。第48頁,共54頁,2024年2月25日,星期天例:從命令行中讀取類名,輸出其所有方法(args[0]:Java.lang.Thread)importjava.lang.reflect.*;publicclassDumpMethods{publicstaticvoidmain(String[]args)throwsException{//加載并初始化命令行參數(shù)指定的類ClassclassType=Class.forName(args[0]);//獲取類的所有方法Methodmethod[]=classType.getDeclaredMethods();for(inti=0;i<method.length;i++){System.out.println(method[i].toString());}}}程序運行結(jié)果(參數(shù)為java.lang.Thread)publicstaticnativejava.lang.Threadjava.lang.Thread.currentThread()privatenativebooleanjava.lang.Thread.isInterrupted(boolean)publicbooleanjava.lang.Thread.isInterrupted()publicvoidjava.lang.Thread.run()privatevoidjava.lang.Thread.exit()privatevoidjava.lang.Thread.dispatchUncaughtException(java.lang.Throwable)privatestaticnativevoidjava.lang.Thread.registerNatives()publicjava.lang.Stringjava.lang.Thre

溫馨提示

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

評論

0/150

提交評論