版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java面向?qū)ο蟪绦蛟O(shè)計(jì)2課程的主要內(nèi)容1、概述2、Java語言基礎(chǔ)3、面向?qū)ο蠹夹g(shù)4、Java實(shí)用類庫5、輸入/輸出處理6、異常處理(Exception)7、多線程8、圖形用戶界面與事件處理9、網(wǎng)絡(luò)通信10、數(shù)據(jù)庫編程3參考資料Java編程思想Java核心技術(shù),卷I:基礎(chǔ)知識/java/4本講基本內(nèi)容簡介各種相關(guān)的編程語言介紹Java語言的特點(diǎn)介紹Java語言的開發(fā)環(huán)境Java程序規(guī)范5Java的歷史1991年SunMicrosystem公司的JamesGosling、BillJoe等人開發(fā)的面向信息家電的編程軟件OakOak->Java:互聯(lián)網(wǎng)給Java帶來新的生機(jī)1995年Sun向公眾推出Java并引起業(yè)界的轟動(dòng)Java是當(dāng)今最流行的軟件開發(fā)語言之一,Sun推出了Java2&J2EE使Java具有更廣泛的用途,適用于各種應(yīng)用開發(fā),尤其是網(wǎng)絡(luò)應(yīng)用,網(wǎng)絡(luò)服務(wù),嵌入式系統(tǒng)6解釋型vs.編譯型的工作模式源程序Java編譯器SPARCpentiumPowerpc中間碼PowerpcpentiumSPARC二進(jìn)制源程序SPARCPowerpcpentiumPowerpcpentiumSPARCJava解釋器類、類庫裝載(庫)鏈接7Java的編譯與執(zhí)行編譯,沒有絕對地址調(diào)入包含、繼承所用到的所有類,內(nèi)存分配確定,變成真正可執(zhí)行的機(jī)器碼Java源程序(.java文件)Java編譯器JavaBytecode(.class文件)系統(tǒng)執(zhí)行平臺Bytecode解釋器Bytecode載入器字節(jié)碼校驗(yàn)器不存在偽造的指針不違反訪問權(quán)限不非法訪問對象不導(dǎo)致操作棧溢出
8Java虛擬機(jī)不同的操作系統(tǒng)有不同的虛擬機(jī)。它類似一個(gè)小巧而高效的CPU。Bytecode代碼是與平臺無關(guān)的虛擬機(jī)的機(jī)器指令。Java字節(jié)代碼運(yùn)行的兩種方式:interpreter(解釋方式)Just-in-time(即時(shí)編譯):由代碼生成器將字節(jié)代碼轉(zhuǎn)換成本機(jī)的機(jī)器代碼,然后可以以較高速度執(zhí)行.JavainterpreterJust-in-timecompilerRuntimeSystemOperatingSystemHardware9Java開發(fā)環(huán)境——開發(fā)工具javac.exe:Java編譯器,用來將java程序編譯成Bytecode。java.exe:Java解釋器,執(zhí)行已經(jīng)轉(zhuǎn)換成Bytecode的Java應(yīng)用程序。jdb.exe:Java調(diào)試器,用來調(diào)試Java程序。javap.exe:反編譯(將.class文件還原為.java)。javadoc.exe:文檔生成器,創(chuàng)建HTML文件。appletviwer.exe:Applet解釋器,用來解釋已經(jīng)轉(zhuǎn)換成Bytecode的Java小應(yīng)用程序。10Java程序——程序結(jié)構(gòu)Java程序結(jié)構(gòu):package語句:零個(gè)或一個(gè),必須放在文件開始import語句:零個(gè)或多個(gè),必須放在所有類定義之前publicClassDefinition:零個(gè)或一個(gè)ClassDefinition:零個(gè)或多個(gè)InterfaceDefinition:零個(gè)或多個(gè)類個(gè)數(shù):至少一個(gè)類,最多只能有一個(gè)public類源文件命名:若有public類,源文件必須按該類命名標(biāo)識符:區(qū)分大小寫建議:一個(gè)類一個(gè).java文件11Java程序——命名規(guī)則包、類、變量、方法等命名:要體現(xiàn)各自的含義。包名全部小寫,io,awt類名第一個(gè)字母要大寫,HelloWorldApp變量名第一個(gè)字母要小寫,userName方法名第一個(gè)字母要小寫,setName程序書寫格式:保證良好的可讀性,使程序一目了然。大括號{}的使用與對齊語句段的對齊在語句段之間適當(dāng)空行程序注釋:幫助了解程序的功能。類注釋 變量注釋 方法注釋語句注釋 語句段注釋13Java語言基礎(chǔ)關(guān)鍵字與標(biāo)識符數(shù)據(jù)類型數(shù)據(jù)類型的轉(zhuǎn)換運(yùn)算符和表達(dá)式流程控制數(shù)組141.1標(biāo)識符(Identifier)程序員對程序中的各個(gè)元素加以命名時(shí)使用的命名記號稱為標(biāo)識符,包括:類名、變量名、方法名……Java語言中,標(biāo)識符是以字母,下劃線(_),貨幣符($£¥)開始的一個(gè)字符序列,后面可以跟字母,下劃線,貨幣符,數(shù)字。Java標(biāo)識符區(qū)分大小寫字母。標(biāo)識符中最好不使用貨幣符($£),因?yàn)檫@些符號常被用于內(nèi)部處理。合法的標(biāo)識符:IdentifieruserNameUser_Name_sys_value$changemy$Change非法的標(biāo)識符:2mailroom#class151.2數(shù)據(jù)類型(DataType)Javatypesystemprimitivereferencenullcharnumericbooleanclassinterfacearrayintegralfloating-pointbyteshortintlongfloatdouble161.2數(shù)據(jù)類型(DataType)數(shù)據(jù)類型
所占位數(shù)
數(shù)的范圍
boolean 1 true/falsechar 16 0~65535byte
8
-27~27-1short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 float0.0f 32 7 -3.4e+38
~3.4e+38double0.0 64 15 -1.7e+308
~1.7e+308171.2數(shù)據(jù)類型(DataType)所有基本類型所占的位數(shù)都是確定的,并不因操作系統(tǒng)的不同而不同。所有基本類型的關(guān)鍵詞都是小寫的。數(shù)據(jù)類型轉(zhuǎn)換必須滿足如下規(guī)則:不能對boolean類型進(jìn)行類型轉(zhuǎn)換。不能把對象類型轉(zhuǎn)換成不相關(guān)類的對象。在把容量大的類型轉(zhuǎn)換為容量小的類型時(shí)必須使用強(qiáng)制類型轉(zhuǎn)換。181.2.1布爾類型(boolean)布爾型數(shù)據(jù)只有兩個(gè)值true和false它們不對應(yīng)于任何整數(shù)值false為缺省值布爾型數(shù)據(jù)只能參與邏輯關(guān)系運(yùn)算:&&||==!=!示例:booleanb1;booleanb2=true;b=!b2;booleanb=(b1&&b2)!=false;191.2.2字符類型(char)字符型數(shù)據(jù)代表16位的Unicode字符字符常量是用單引號括起來的一個(gè)字符'a'‘B’‘\n’‘\u0030’字符型數(shù)據(jù)的取值范圍為0~65535或者說\u0000~\uFFFF\u0000為缺省值示例charc1; \\缺省值為0charc2=‘0’; \\賦初值為字符'0'charc3=32; \\用整數(shù)賦初值為空格201.2.2字符類型(char)特殊字符的常量表示法:反斜線(Backslash) ‘\\’退格(Backspace) ‘\b’回車(Carriagereturn) ‘\r’進(jìn)紙符(Formfeed) ‘\f’制表符(Formfeed) ‘\t’換行(Newline) ‘\n’單引號(Singlequote) ‘\’’八進(jìn)制數(shù)(‘\0’~‘\377’
) ‘\DDD’Unicode字符 ‘\uHHHH’211.2.3整數(shù)類型(byteshortintlong)整數(shù)常量表示法:十進(jìn)制:
0-243
2147483647八進(jìn)制以0開頭:
010[=8]-0377[=-255]十六進(jìn)制以0x或0X開頭:
0x10[=16]-0XF=[-15]64位長整數(shù)以l或L結(jié)尾:12l-343L0xfffffffffL1L<<32等于4294967296L1<<32等于1(特別注意非0)沒有以l或L結(jié)尾的數(shù)字,根據(jù)其實(shí)際值所屬范圍,可以被用作byte,short,或int型整數(shù)以l或L結(jié)尾的數(shù)字,無論其實(shí)際值所屬范圍怎樣,都被用作long型整數(shù)221.2.3整數(shù)類型(byteshortintlong)示例byteb1; \\缺省值為0byteb2=127; \\賦初值為127shorts1=(short)(b1+b2);\\強(qiáng)制類型轉(zhuǎn)換shorts2=(short)(b1+123)\\強(qiáng)制類型轉(zhuǎn)換intn=b1+b2; \\不需要強(qiáng)制類型轉(zhuǎn)換longl1=2343; \\不需要強(qiáng)制類型轉(zhuǎn)換longl2=4294967296L; \\必須用L或l結(jié)尾longl3=65536*63356; \\乘法運(yùn)算越界,l3為0longl4=65536L*63356; \\l3為4294967296L231.2.4浮點(diǎn)數(shù)類型(floatdouble)浮點(diǎn)數(shù)(實(shí)數(shù))常量的兩種表示法十機(jī)制小數(shù)形式:0.23.18-234.科學(xué)計(jì)數(shù)法形式:0.23e61.23E-432位浮點(diǎn)數(shù)形式:0.23f1.23E-4f.18F示例doubled1=127.0; \\賦初值為127doubled2=127; \\賦初值為127floatf1=127.0f; \\必須在數(shù)字后加f或Ffloatf2=4.0e38f; \\錯(cuò)誤!32位浮點(diǎn)數(shù)不能超過 \\3.4028234663852886e38floatf3=(float)d1; \\必須強(qiáng)制類型轉(zhuǎn)換241.2.5類型轉(zhuǎn)換(typecast)基本數(shù)據(jù)類型在賦值時(shí)的自動(dòng)類型轉(zhuǎn)換規(guī)則:byte short,char,int,long,float,doubleshort int,long,float,doublechar int,long,float,doubleint long,float,doublelong float,doublefloat double反向的類型轉(zhuǎn)換必須使用強(qiáng)制類型轉(zhuǎn)換轉(zhuǎn)換過程中可能損失精度(byte)255==-1 (byte)0x5634==0x34浮點(diǎn)數(shù)到整數(shù)的轉(zhuǎn)換是通過舍棄小數(shù)得到,而不是四舍五入(int)23.7==23 (int)-45.89f==-45251.3字符串(String)字符串是Java中最常用的類字符串常量是雙引號(“”)引起來的字符序列“astring”“a\nmultiline\nstring\n”多個(gè)字符串通過連接運(yùn)算(+)生成新字符串對象“twostring”+“concatenateintoone”字符串可以和基本類型做連接運(yùn)算Strings=“0xF=”+0xF;//“0xF=15”字符串可以和任何對象做連接運(yùn)算Strings=“s=”+anObject;//“s=…”261.3.1基本類型轉(zhuǎn)換為字符串布爾類型(boolean)true->“true” false->“false”整數(shù)類型(byteshortintlong)byteshortintlong->整數(shù)的十進(jìn)制表示字符類型(char)’A’->“A” ‘\uHHHH’->“\uHHHH”浮點(diǎn)數(shù)類型(floatdoule)相應(yīng)精度的十進(jìn)制浮點(diǎn)數(shù)(必要時(shí)使用科學(xué)計(jì)數(shù)法)float的精度約為7;double的精度約為15271.3.2對象轉(zhuǎn)換為字符串任何一個(gè)對象都有toString()方法,這個(gè)方法在所有對象的基類Object中有缺省實(shí)現(xiàn)在需要將對象自動(dòng)轉(zhuǎn)換為字符串的地方,對象的toString()方法被調(diào)用,用來生成相應(yīng)的字符串。任何類(class)、接口(interface)、數(shù)組(array)的實(shí)例都是對象。281.3.3字符串(String)特殊字符在字符串中的表示法反斜線(Backslash) \\退格(Backspace) \b回車(Carriagereturn) \r進(jìn)紙符(Formfeed) \f制表符(Formfeed) \t換行(Newline) \n雙引號(Doublequote) \”八進(jìn)制數(shù)(‘\0’~‘\377’
) \DDDUnicode字符 \uHHHH292.1運(yùn)算符(Operator)算術(shù)運(yùn)算符:+,―,*,/,%,++,--關(guān)系運(yùn)算符:>,<,>=,<=,==,!=布爾邏輯運(yùn)算符:!,&&,||位運(yùn)算符:>>,<<,>>>,&,|,^,~賦值運(yùn)算符:=,+=,-=,*=,/=三元條件運(yùn)算符:?:302.1運(yùn)算符(Operator)其它特殊的運(yùn)算符包括分量運(yùn)算符:.下標(biāo)運(yùn)算符:[]實(shí)例類型判斷運(yùn)算符:instanceof對象示例創(chuàng)建運(yùn)算符:new,強(qiáng)制類型轉(zhuǎn)換運(yùn)算符:(類型)方法調(diào)用運(yùn)算符:()312.2表達(dá)式表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語法形式組成的符號序列。一個(gè)常量或一個(gè)變量名字是最簡單的表達(dá)式,其值即該常量或變量的值;表達(dá)式的值還可以用作其他運(yùn)算的操作數(shù),形成更復(fù)雜的表達(dá)式。示例:X num1+num2 a*(b+c)+d3.14 x<=(y+z) x&&y||z322.3優(yōu)先級和結(jié)合順序1) .,
[],() 9) &2) ++,--,!,~,instanceof 10) ^
3) +,-,(type),
new 11) |4) *
,/,% 12) &&5) +,- 13) ||6) >>,>>>,<< 14) ?:7) >,<,>=,<= 15) =,+=,-=,*=,/=,%=,^=8) ==,!= 16) &=,|=,<<=,>>=,>>>=注:紅色的從右到左,其余的從左到右;用括號改變結(jié)合順序。 藍(lán)色運(yùn)算符對byte、short、char作運(yùn)算時(shí),結(jié)果為int型整數(shù)。332.4語句和代碼段一個(gè)由分號(;)結(jié)尾的單一命令是一條語句(Statement),一條語句一般是一行代碼,但也可以占多行代碼。inta=1;//變量定義及初始化語句用大括號({……})圍起來的多條語句構(gòu)成一個(gè)代碼段(Codeblock);同時(shí)代碼段也大括號前的一些修飾性描述:classAclass{ for(inti=0;i<=1;i++){……
……
} }342.5作用域(Scope)作用域決定了變量可使用的范圍全局變量(Globalvariables):變量可以在整個(gè)類中被訪問;(成員變量,類變量)局部變量(Localvariables):變量只能在定義其的代碼段中被訪問。作用域規(guī)則:在一個(gè)代碼段中定義的變量只能在該代碼段或者該代碼段的子代碼段中可見。使用局部變量比使用全局變量更安全。352.5作用域(示例)classScoping{intx=0;voidmethod1(){inty;y=x;//OK.method1可以訪問y.}voidmethod2(){intz=1;z=y;//Error.y在method2的作用域之外定義
}}363.Java語言的控制分支語句:if-else,switch循環(huán)語句:while,do-while,for與程序轉(zhuǎn)移有關(guān)的其它語句:break,continue,return例外處理語句:try-catch-finally,throw373.1條件語句if-elseif(boolean-expression1){statements1;}elseif(boolean-expression2){statements2;}……elseif(boolean-expressionN){statementsN;}else{statementsElse;}383.1條件語句if-else布爾表達(dá)式boolean-expression是任意一個(gè)返回布爾數(shù)據(jù)類型的表達(dá)式,而且必須是(比C或C++要嚴(yán)格)。與C或C++一樣,每個(gè)單一語句后面都要有分號。為了增強(qiáng)程序的可讀性,應(yīng)將if或else后的語句用{}括起來。else子句是任選的,不能單獨(dú)作為語句使用,它必須和if語句配對使用,并且總是與離它最近的if配對。if(1<2){System.out.println(“1issmallerthan2”);}else{System.out.println(“CanNOTreachhere!”);}393.1多分支語句switchswitch(expression) {casevalue1:statements1;break;……casevalueN:statementsN;break;[default:defaultStatements;]}403.1多分支語句switch表達(dá)式expression的返回值類型必須是這幾種類型之一:int、byte、char、short、String。case子句中的值valueI必須是常量,而且所有case子句中的值應(yīng)是不同的。default子句是任選的。break語句用來在執(zhí)行完一個(gè)case分支后,使程序跳出switch語句,即終止switch語句的執(zhí)行。如果某個(gè)case分支后沒有break語句,程序?qū)⒉辉僮霰容^而執(zhí)行下一個(gè)分支。switch語句的功能可以用if-else語句來實(shí)現(xiàn),但某些情況下,使用switch語句更簡煉。413.1多分支語句switchinta=100,b=20,c;charoper=‘+’;switch(oper){case‘+’:c=a+b;break;case‘-’:c=a-b;break;default:c=a*b;
[break;]}423.2循環(huán)語句while[initialization]//初始化條件while(termination){//循環(huán)條件
body; //循環(huán)體
[iteration;] //迭代變更循 //環(huán)條件}當(dāng)表達(dá)式termination為true時(shí),執(zhí)行{}中的語句,否則終止循環(huán)。tbfalsetrue433.2循環(huán)語句do-while[initialization]//初始化條件do{body; //循環(huán)體
[iteration;] //迭代變更循 //環(huán)條件}while(termination);//循環(huán)條件首先執(zhí)行一遍{}中的語句,當(dāng)表達(dá)式termination為true時(shí),繼續(xù)執(zhí)行{}中的語句,否則終止循環(huán)。tbfalsetrue443.2循環(huán)語句forfor(Init;Termination;Iterat){ body;//循環(huán)體}Init//初始化條件Termination//循環(huán)條件Iterat//迭代變更循環(huán)條件tbodyfalsetrueiterainit453.2循環(huán)語句forfor語句執(zhí)行時(shí),首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執(zhí)行循環(huán)體中的語句,最后執(zhí)行迭代部分。完成一次循環(huán)后,重新判斷終止條件。初始化、終止以及迭代部分都可以為空語句(但分號不能省),三者均為空的時(shí)候,相當(dāng)于一個(gè)無限循環(huán)。在初始化部分和迭代部分可以使用逗號語句,來進(jìn)行多個(gè)操作。逗號語句是用逗號分隔的語句序列。for(inti=0,intj=10;i<j;i++,j--){……}463.2循環(huán)語句比較intn=1,sum=0;while(n<=10){sum=sum+n;n++;}intn=10,sum=0;do{sum+=n;n--;}while(n>0);intsum=0;for(inti=1;i<=10;i++){sum+=i;}while循環(huán)do-while循環(huán)for循環(huán)473.3程序轉(zhuǎn)移相關(guān)語句break在switch語中,break語句用來終止switch語句的執(zhí)行,使程序從整個(gè)switch語句后的第一條語句開始執(zhí)行。在循環(huán)語句中,break用于終止并跳出循環(huán),從緊跟著循環(huán)體代碼段后的語句執(zhí)行。在Java中,可以為每個(gè)代碼塊加一個(gè)標(biāo)號,break語句可用于跳出它所指定的塊,并從緊跟該塊后的第一條語句處執(zhí)行。BlockLabel:{codeBlock;breakBlockLabel;}483.3程序轉(zhuǎn)移相關(guān)語句breaka:{//標(biāo)記代碼塊a…… b:{//標(biāo)記代碼塊b……c:{//標(biāo)記代碼塊c……breakb;……//這段語句將不執(zhí)行
}//代碼塊c結(jié)束
……//這段語句也不執(zhí)行
}//代碼塊b結(jié)束
……//從這段語句開始執(zhí)行}//代碼塊a結(jié)束493.3程序轉(zhuǎn)移相關(guān)語句continuecontinue語句用來結(jié)束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對于for語句,在進(jìn)行終止條件的判斷前,還要先執(zhí)行迭代語句。它的格式為:continue;也可以用continue跳轉(zhuǎn)到括號指明的外層循環(huán)中,這時(shí)的格式為continueouterLable;503.3程序轉(zhuǎn)移相關(guān)語句continueouter:for(inti=0;i<10;i++){//外層循環(huán)
inner:for(intj=0;j<10;j++){//內(nèi)層循環(huán)
if(i<j){ ……
continueouter; } ……}//內(nèi)層循環(huán)結(jié)束
……}//外層循環(huán)結(jié)束for(inti=0;i<10;i++){if(i==5){continue;}
……}513.3程序轉(zhuǎn)移相關(guān)語句returnreturn語句從當(dāng)前方法中退出,返回到調(diào)用該方法的語句處,并從緊跟該語句的下一條語句繼續(xù)程序的執(zhí)行。返回語句有兩種格式:returnexpression;//當(dāng)方法需要返回某種類型數(shù)據(jù)時(shí)return;//當(dāng)方法的返回類型為void時(shí)單獨(dú)一條return語句放在方法中間時(shí),會產(chǎn)生編譯錯(cuò)誤,因?yàn)槠浜蟮恼Z句將不會執(zhí)行到。若真需要退出方法,可以通過將return語句嵌入某些語句(如if-else)來使程序在未執(zhí)行完方法中所有語句時(shí)退出。524
數(shù)組和字符串?dāng)?shù)組是一組同類型的變量或?qū)ο蟮募蠑?shù)組的類型可以是基本類型,或類和接口數(shù)組中每個(gè)元素的類型相同引用數(shù)組元素通過數(shù)組名[下標(biāo)]數(shù)組下標(biāo)(數(shù)組的索引)從0開始數(shù)組是一種特殊的對象(Object)定義類型(聲明)創(chuàng)建數(shù)組(分配內(nèi)存空間):new釋放(Java虛擬機(jī)完成)一維數(shù)組、多維數(shù)組534.1一維數(shù)組一維數(shù)組的元素只有一個(gè)下標(biāo)變量例:A[1],c[3]一維數(shù)組的聲明方法1:類型數(shù)組名[];Stringargs[];inta[];doubleamount[];charc[];方法2:類型[]數(shù)組名;String[]args;int[]a;double[]amount;char[]c;注意類型是數(shù)組中元素的數(shù)據(jù)類型(基本和構(gòu)造類型)數(shù)組名是一個(gè)標(biāo)識符數(shù)組聲明后不能被訪問,因未為數(shù)組元素分配內(nèi)存空間variabledmightnothavebeeninitializedSystem.out.println(d[0]);^1errordouble[]d;System.out.println(d[0]);54數(shù)組的創(chuàng)建用new來創(chuàng)建數(shù)組為數(shù)組元素分配內(nèi)存空間,并對數(shù)組元素進(jìn)行初始化格式:數(shù)組名=new類型[數(shù)組長度]例:a=newint[3];聲明和創(chuàng)建的聯(lián)用:int[]a=newint[3];默認(rèn)賦初值整型初值為0int[]i=newint[3];實(shí)型初值為0.0float[]f=newfloat[3];布爾型初值為falseboolean[]b=newboolean[3];字符型初值為\u0000(不可見)char[]c=newchar[3];55classTest{ publicstaticvoidmain(Stringargs[]){ int[]i=newint[3]; float[]f=newfloat[3]; boolean[]b=newboolean[3]; char[]c=newchar[3]; for(intj=0;j<i.length;j++) System.out.println(i[j]); for(intj=0;j<f.length;j++) System.out.println(f[j]); for(intj=0;j<b.length;j++) System.out.println(b[j]); for(intj=0;j<c.length;j++) System.out.println(c[j]); }}C:\>javaTest0000.00.00.0falsefalsefalseC:\T56一維數(shù)組的初始化為數(shù)組元素指定初始值方式一:聲明和創(chuàng)建數(shù)組后對數(shù)組初始化classTest{ publicstaticvoidmain(Stringargs[]){ inta[]=newint[5]; System.out.println(“\t輸出一維數(shù)組a:”); for(inti=0;i<5;i++){ a[i]=i+1; System.out.println(“\ta[”+i+“]=”+a[i]); }}}a.length57一維數(shù)組的初始化方式二:在聲明數(shù)組的同時(shí)對數(shù)組初始化格式:類型數(shù)組名[]={元素1[,元素2……]};inta[]={1,2,3,4,5};classTest{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4,5}; System.out.println(“\t輸出一維數(shù)組a:”); for(inti=0;i<5;i++) System.out.println(“\ta[”+i+“]=”+a[i]); }}58數(shù)組的賦值數(shù)組的整體賦值用java.lang.System類的方法進(jìn)行數(shù)組復(fù)制59數(shù)組整體賦值classTest{ publicstaticvoidmain(Stringargs[]){ inta[]={2,4,6,8}; intb[];int[]c={1,3,5,7}; b=a;c=a; for(intj=0;j<a.length;j++) System.out.print(a[j]+““); System.out.println(); for(intj=0;j<b.length;j++) System.out.print(b[j]+““); System.out.println(); for(intj=0;j<c.length;j++) System.out.print(c[j]); }}C:\>javaTest246824682468C:\>T60一維數(shù)組的數(shù)組復(fù)制java.lang.System類的方法publicstaticvoidarraycopy(Objectsrc, intsrcIndex, Objectdest, intdestIndex, intlength)61classTest{publicstaticvoidmain(Stringargs[]){int[]a={2,4,6,8}; int[]b; int[]c={1,3,5,7,9}; b=a; System.arraycopy(a,1,c,0,3); System.out.print(“數(shù)組a:”); for(inti=0;i<a.length;i++) System.out.print(a[i]+“”); System.out.println(); System.out.print(“數(shù)組b:”); for(inti=0;i<b.length;i++) System.out.print(b[i]+“”); System.out.println();一維數(shù)組的數(shù)組復(fù)制System.out.print(“數(shù)組c:”);for(inti=0;i<c.length;i++) System.out.print(c[i]+“”);System.out.println();}}數(shù)組a:2468數(shù)組b:2468數(shù)組c:46879T62小結(jié)類型相同、數(shù)量確定的存儲結(jié)構(gòu)用下標(biāo)訪問數(shù)組中任一個(gè)元素,數(shù)組名[下標(biāo)]聲明、創(chuàng)建(new)、初始化/賦值int[]d;System.out.println(d[0]);System.out.println(d.length);variabledmightnothavebeeninitializedSystem.out.println(d[0]); ^System.out.println(d.length);^634.2多維數(shù)組數(shù)組的數(shù)組ArraysofArrays例:表格(行和列)以二維數(shù)組為例期中考試期末考試姓名總分6870學(xué)生A698085學(xué)生B847590學(xué)生C8664二維數(shù)組的聲明類型數(shù)組名[][],例inta[][];數(shù)組聲明后不能被訪問,因未為數(shù)組元素分配內(nèi)存空間二維數(shù)組的創(chuàng)建方法一:直接分配空間(new)例inta[][]=newint[2][3];
a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]兩個(gè)一維數(shù)組,每個(gè)數(shù)組包含3個(gè)元素65二維數(shù)組的創(chuàng)建方法二:從最高維開始,為每一維分配空間例int[][]c=newint[2][];c[0]=newint[4];c[1]=newint[3];c[0][0]c[0][1]c[0][2]c[0][3]c[1][0]c[1][1]c[1][2]注:為數(shù)組分配空間需指定維數(shù)大小,至少最高維(最左邊)大小錯(cuò)誤:intb[][]=newint[][];66二維數(shù)組的初始化對每個(gè)元素單獨(dú)進(jìn)行賦值聲明數(shù)組的同時(shí)初始化對數(shù)組元素的引用數(shù)組名[下標(biāo)1][下標(biāo)2]下標(biāo)為非負(fù)的整型常數(shù)0~67二維數(shù)組的初始化每個(gè)元素單獨(dú)進(jìn)行賦值classTest{ publicstaticvoidmain(Stringargs[]){ int[][]a=newint[3][3]; a[0][0]=1;a[1][1]=1;a[2][2]=1; System.out.println(“數(shù)組a:”); for(inti=0;i<a.length;i++){ for(intj=0;j<a[i].length;j++) System.out.print(a[i][j]+“”); System.out.println(); } }}最高維數(shù)組長度10001000168二維數(shù)組的初始化聲明數(shù)組的同時(shí)初始化例int[][]a={{1,2,3},{3,4,5}};a[0][0]=1a[0][1]=2a[0][2]=3a[1][0]=3a[1][1]=4a[1][2]=5
例String[][]cartoons={{"Flint","Fred","Wim","Pebbles","Dino"},{"Rub","Barn","Bet","Bam"},{"Jet","Geo","Jane","Elroy","Judy","Rosie","Astro"},{"Sco","Sco","Shag","Velma","Fred","Dap"}};inti=cartoons.length694.3數(shù)組的界限起點(diǎn)和終點(diǎn)數(shù)組的長度:數(shù)組名.length起點(diǎn):數(shù)組名[0]終點(diǎn):數(shù)組名[length-1]inti={4,56,78,9,34};i.length5i[0]
4i[length-1]=i[4]34i[a]若a>4則???703類和對象-1程序語言的發(fā)展面向機(jī)器(機(jī)器語言、匯編語言)可讀性、可維護(hù)、移植性差;效率高。面向過程核心:算法+數(shù)據(jù)結(jié)構(gòu)缺陷:隨著應(yīng)用程序的規(guī)模擴(kuò)大,操作與數(shù)據(jù)分離所帶來的維護(hù)工作量越來越大不適用于GUI界面、事件驅(qū)動(dòng)編程面向?qū)ο竺嫦驅(qū)ο笤O(shè)計(jì)思想的要點(diǎn)認(rèn)為客觀世界由各種對象組成,任何事物都是對象,復(fù)雜的對象可以由比較簡單的對象以某種方式組合而成。把所有對象都劃分成各種對象類,每個(gè)對象類都定義了一組數(shù)據(jù)和一組方法。按照子類與父類的關(guān)系,把若干個(gè)對象類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)。對象彼此之間僅能通過傳遞消息互相聯(lián)系
抽象性 封裝性 繼承性多態(tài)性面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn)開發(fā)時(shí)間短,效率高,可靠性高,所開發(fā)的程序更強(qiáng)壯。由于面向?qū)ο缶幊痰目芍赜眯裕梢栽趹?yīng)用程序中大量采用成熟的類庫,從而縮短了開發(fā)時(shí)間。應(yīng)用程序更易于維護(hù)、更新和升級。繼承和封裝使得應(yīng)用程序的修改帶來的影響更加局部化。可重用性 可擴(kuò)展性 可管理性741.面向?qū)ο蟮母拍瞵F(xiàn)實(shí)世界 :人、狗、書計(jì)算機(jī)模型:類是對象的模板,對象是類的實(shí)例
classPerson{}
Personp=newPerson();intx=9;int[]a=newint[]{1,2,3};Strings=newString(“qaz”);75現(xiàn)實(shí)生活中的對象對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(class)。classCar{intcolorNo;intdoorNumber;
intspeed;
voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}
抽象數(shù)據(jù)類型76……Carcar1;Carcar2;…
…CarcarN;方法構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型,構(gòu)造方法也可以重載。方法重載:一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是某個(gè)參數(shù)的類型不同。實(shí)例方法和類方法classA{inta;floatmax(floatx,floaty){//實(shí)例方法
…}
staticfloatjerry(){//類方法
…}
staticvoidspeak(Strings){//類方法
…}}實(shí)例方法既能對類變量操作也能對實(shí)例變量操作,而類方法只能對類變量進(jìn)行操作。實(shí)例方法可以調(diào)用該類中的實(shí)例或類方法;類方法只能調(diào)用該類的類方法,不能調(diào)用實(shí)例方法。靜態(tài)的是屬于類的,實(shí)例的屬于對象實(shí)例。成員變量、類變量、局部變量對象的內(nèi)存模型(引用、指針\堆和棧)創(chuàng)建一個(gè)對象包括對象的聲明和為對象分配classPoint{intx,y;Point(inta,intb){x=a;y=b;}}Pointp1=newPoint(5,15);Pointp2=newPoint(8,18);p1=p2;參數(shù)的傳遞this關(guān)鍵字包是Java語言中有效地管理類的一個(gè)機(jī)制包名的目的是有效的區(qū)分名字相同的類,不同Java源文件中兩個(gè)類名字相同時(shí),它們可以通過隸屬不同的包來相互區(qū)分com.sun.java.Hello.class包和import84訪問權(quán)限當(dāng)類可以被訪問時(shí),對類的成員變量和成員方法而言,其應(yīng)用范圍可以通過施以一定的訪問權(quán)限來限定。 類內(nèi) 包內(nèi) 子類 任意 公共的(public) ★ ★ ★ ★ 保護(hù)的(protected)★ ★ ★ 包訪問(缺?。?★ ★ 私有的(private) ★基本類型的類包裝
提供了基本數(shù)據(jù)類型相關(guān)的類,這些類在java.lang包中,分別是:Byte、Integer、Short、Long、Float、Double和Character類.自動(dòng)裝箱就是允許把一個(gè)基本數(shù)據(jù)類型的值直接賦值給基本數(shù)據(jù)類型相對應(yīng)的類的實(shí)例,例如:
Integernumber=100;或
intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動(dòng)拆箱就是允許把基本數(shù)據(jù)類型的類的實(shí)例當(dāng)作相應(yīng)的基本數(shù)據(jù)類型來使用,例如:number是一個(gè)Integer對象,那么允許:
intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();4.11基本類型的類包裝
4.11.1Double和Float類4.11.2Byte、Short、Integer、Long類4.11.3Character類4.11.4自動(dòng)裝箱與拆箱自動(dòng)裝箱就是允許把一個(gè)基本數(shù)據(jù)類型的值直接賦值給基本數(shù)據(jù)類型相對應(yīng)的類的實(shí)例,例如:
Integernumber=100;或
intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動(dòng)拆箱就是允許把基本數(shù)據(jù)類型的類的實(shí)例當(dāng)作相應(yīng)的基本數(shù)據(jù)類型來使用,例如:number是一個(gè)Integer對象,那么允許:
intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();87子類子類是作為另一個(gè)類的擴(kuò)充或修正而定義的一個(gè)類。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass88繼承繼承使得子類可以利用父類中定義的方法和變量,就像它們屬于子類本身一樣。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}
classManagerextendsEmployee{Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}
89方法override和成員變量的隱藏覆蓋使得在子類中可以重新定義父類中已有的方法,從而是子類具有自己的行為。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}
classManagerextendsEmployee{Stringdepartment;
Stringname;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}
90繼承的例子ShapePointCircleCylinder何時(shí)選擇繼承?一個(gè)很好的經(jīng)驗(yàn):“B是一個(gè)A嗎?”如果是則讓B做A的子類.在更多的時(shí)候,組成關(guān)系比繼承更能使系統(tǒng)具有高度的靈活性,可維護(hù)行,并且提高系統(tǒng)的可重用性。ShapePointCircleCylinder91方法覆蓋時(shí)應(yīng)遵循的原則:覆蓋后的方法不能比被覆蓋的方法有更嚴(yán)格的訪問前提條件。覆蓋后的方法不能比被覆蓋的方法產(chǎn)生更多的例外,也不能有更松的事后條件。super1、子類如果想明確使用父類的構(gòu)造方法,必須在子類的構(gòu)造方法中使用關(guān)鍵字super來調(diào)用父類的構(gòu)造方法,而且super必須是子類構(gòu)造方法中的頭一條語句。3、在父類中定義構(gòu)造方法時(shí),應(yīng)盡量寫一個(gè)不帶參數(shù)的構(gòu)造方法,以防子類省略super時(shí)出現(xiàn)錯(cuò)誤。2、在子類的構(gòu)造方法中,沒有明顯地寫出super關(guān)鍵字來調(diào)用父類的某個(gè)構(gòu)造方法,那么默認(rèn)地有:super();即調(diào)用父類的不帶參數(shù)的構(gòu)造方法。2、final類不能被繼承,即不能有子類。1、final關(guān)鍵字可以修飾類、成員變量和方法中的局部變量。3、修飾方法,則不允許子類重寫父類的final方法。4、成員變量或局部變量被修飾為final的,就是常量。常量在聲明時(shí)沒有默認(rèn)值,所以在聲明常量時(shí)必須指定該常量的值,而且不能再發(fā)生變化。final對象的上轉(zhuǎn)型1.上轉(zhuǎn)型對象不能操作子類新增的成員變量(失掉了這部分屬性);不能調(diào)用子類新增的方法(失掉了一些功能)。2.上轉(zhuǎn)型對象可以訪問子類繼承或隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類的重寫方法。上轉(zhuǎn)型對象操作子類繼承的方法或子類重寫的方法,其作用等價(jià)于子類對象去調(diào)用這些方法。因此,如果子類重寫了父類的某個(gè)方法后,當(dāng)對象的上轉(zhuǎn)型對象調(diào)用這個(gè)方法時(shí)一定是調(diào)用了子類重寫的方法。多態(tài)多態(tài):不同的對象收到同一個(gè)消息可產(chǎn)生完全不同的效果
或同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力多態(tài)的效果:用戶發(fā)送一個(gè)通用的消息,而實(shí)現(xiàn)的細(xì)節(jié)則由接收對象自行決定。多態(tài)的作用:增強(qiáng)了操作的透明性、可理解性和可擴(kuò)展性。增強(qiáng)了軟件的靈活性和重用性。多態(tài)存在的三個(gè)必要條件繼承重寫父類引用指向子類對象9596抽象類抽象類:用abstract關(guān)鍵字來修飾一個(gè)類時(shí),該類叫做抽象類;抽象類必須被繼承。抽象類不能被直接實(shí)例化。它只能作為其它類的超類,這一點(diǎn)與最終類(final類)正好相反。抽象方法:用abstract來修飾一個(gè)方法時(shí),該方法叫做抽象方法。抽象方法必須被重寫抽象方法只有聲明,不能有實(shí)現(xiàn)。定義了抽象方法的類必須是抽象類。abstract類的理解
1、抽象類可以抽象出重要的行為標(biāo)準(zhǔn),該行為標(biāo)準(zhǔn)用抽象方法來表示。即抽象類封裝了子類必需要有的行為標(biāo)準(zhǔn)。2、抽象類聲明的對象可以成為其子類的對象的上轉(zhuǎn)型對象,調(diào)用子類重寫的方法,即體現(xiàn)子類根據(jù)抽象類里的行為標(biāo)準(zhǔn)給出的具體行為。3、多態(tài)核心技術(shù)之一是使用上轉(zhuǎn)型對象,即將abstract類聲明對象作為其子類的上轉(zhuǎn)型對象,那么這個(gè)上轉(zhuǎn)型對象就可以調(diào)用子類重寫的方法。4、利用多態(tài)設(shè)計(jì)程序的好處是,可以體現(xiàn)程序設(shè)計(jì)的所謂開-閉原則。開-閉原則強(qiáng)調(diào)一個(gè)程序應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉,增強(qiáng)代碼的可維護(hù)性。98接口(interface)JDK8版本之前,接口體中只有抽象方法.所有的static常量的訪問權(quán)限一定都是public(允許省略public、final和static修飾符,接口中不會有變量)interfacePrintable{
publicstaticfinalintMAX=100;//等價(jià)寫法:intMAX=100;
publicabstractvoidadd();
//等價(jià)寫法:voidadd();}publicinterfacePrintable{publicstaticfinalintMAX=100;//等價(jià)寫法:intMAX=100;publicabstractvoidon();//等價(jià)寫法:voidon();publicdefaultintmax(inta,intb){//default方法returna>b?a:b;}
publicstaticvoidf(){System.out.println("注意是從JavaSE8開始的");}}classAimplementsPrintable,Addable{}一個(gè)類實(shí)現(xiàn)了某個(gè)接口,那么這個(gè)類就自然擁有了接口中的常量,default方法(去掉了default關(guān)鍵字),該類也可以重寫接口中的default方法(注意,重寫時(shí)需要去掉default關(guān)鍵字)。如果一個(gè)非abstract類實(shí)現(xiàn)了某個(gè)接口,那么這個(gè)類必須重寫該接口的所有abstract方法,即去掉abstract修飾給出方法體。特別注意的是,類實(shí)現(xiàn)某接口,但類不擁有接口的static方法。接口中的方法的訪問權(quán)限都是public的,重寫時(shí)不可省略public(否則就降低了訪問權(quán)限,這是不允許的)。接口回調(diào)可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類重寫的接口方法以及接口中的default方法接口回調(diào)即上轉(zhuǎn)型對象調(diào)用子類的重寫方法,即當(dāng)接口變量調(diào)用被類重寫的接口方法或接口中的default方法時(shí),就是通知相應(yīng)的對象調(diào)用這個(gè)方法。接口回調(diào)可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類重寫的接口方法以及接口中的default方法接口回調(diào)即上轉(zhuǎn)型對象調(diào)用子類的重寫方法,即當(dāng)接口變量調(diào)用被類重寫的接口方法或接口中的default方法時(shí),就是通知相應(yīng)的對象調(diào)用這個(gè)方法。
Lambda表達(dá)式Lambda表達(dá)式主要目的是在使用單接口(只含有一個(gè)方法的接口)匿名類時(shí)讓代碼更加簡潔。Lambda表達(dá)式就是一個(gè)匿名方法(函數(shù)).Class類得到一個(gè)類的實(shí)例的最常用的方式就是使用new運(yùn)算符和類的構(gòu)造方法。但是,Java通過使用Class也可以得到一個(gè)類的實(shí)例。為了使用Class得到一個(gè)類的實(shí)例,可以先得到一個(gè)和該類相關(guān)的Class對象(相當(dāng)于得到類型)。
異常(Exception)處理105本講內(nèi)容異常機(jī)制簡介try代碼段拋出異常(throw語句)捕獲異常(catch代碼段)再拋異常(throw)finally代碼段throws語句JDK中的異常自己定義的異常1061.異常機(jī)制簡介在進(jìn)行程序設(shè)計(jì)時(shí),錯(cuò)誤的產(chǎn)生是不可避免的,如何處理錯(cuò)誤?把錯(cuò)誤交給誰去處理?程序又該如何從錯(cuò)誤中恢復(fù)?這是任何程序設(shè)計(jì)語言都要解決的問題。所謂錯(cuò)誤,是在程序運(yùn)行過程中發(fā)生的異常事件,比如除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻礙程序的正常運(yùn)行。為了增加程序的強(qiáng)壯性,程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常情況并做出相應(yīng)的處理。1071.異常機(jī)制簡介普通的錯(cuò)誤處理方法通過被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的錯(cuò)誤;通過使用if語句來判斷是否出現(xiàn)了錯(cuò)誤并進(jìn)行處理。這種錯(cuò)誤處理機(jī)制會導(dǎo)致不少問題函數(shù)的返回值一般有程序意義,需要定義用于錯(cuò)誤處理的無效的返回值;為知道錯(cuò)誤產(chǎn)生的內(nèi)部細(xì)節(jié),常用全局變量(如Errno)來存儲錯(cuò)誤的類型,這容易導(dǎo)致誤用,因?yàn)樽兞康闹涤锌赡苓€未被處理就被另外的錯(cuò)誤覆蓋掉。108沒有錯(cuò)誤處理的程序{openTheFile;determineitssize;allocatethatmuchmemory;read-file……closeTheFile;}109以常規(guī)方法處理錯(cuò)誤openFiles;if(theFilesOpen){
determinethelengthofthefile;if(gotTheFileLength){
allocatethatmuchmemory;if(gotEnoughMemory){
readthefileintomemory;if(readFailed)errorCode=-1;}elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;……110以常規(guī)方法處理錯(cuò)誤存在的困難和問題寫程序難大部分精力花在出錯(cuò)處理上了只把能夠想到的錯(cuò)誤考慮到對以外的情況無法處理程序可讀性差大量的錯(cuò)誤處理代碼混雜在程序中出錯(cuò)返回的信息量太少無法更確切的了解錯(cuò)誤狀況或原因111
用異常機(jī)制處理錯(cuò)誤try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}1122.Java異常機(jī)制try{…}定義可能產(chǎn)生異常的代碼段throwe;用于拋出一個(gè)異常catch(Etypee){…}用于捕獲一個(gè)異常finally{…}用于做統(tǒng)一的事后處理,如釋放資源throwsEtype1,Etype2……用于聲明方法可能拋出的異常類型try-catch-finally1133.try代碼段try代碼段包含可能產(chǎn)生異常的代碼try代碼段后跟有一個(gè)或多個(gè)catch代碼段每個(gè)catch代碼段聲明其能處理的一種特定類型的異常每個(gè)catch代碼段都是一段異常處理代碼try{
可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){
處理異常的語句}……finally{
事后處理語句}1144.拋出異常(throw語句)任何從Throwable派生的類都可以用throw語句拋出,拋出異常用來表明程序遇到的錯(cuò)誤無法正常執(zhí)行而需要異常處理thrownewMyException(“someinfomation”);異常可以由try代碼段中的語句拋出也可以從被try代碼段中調(diào)用的方法中拋出異常還可能產(chǎn)生于數(shù)組下標(biāo)越界以及Java虛擬機(jī)內(nèi)部錯(cuò)誤等Exception和Error是Throwable的直接派生類Exception程序應(yīng)該處理的異常情形Error代表系統(tǒng)嚴(yán)重錯(cuò)誤,一般程序不處理這類錯(cuò)誤異常拋出點(diǎn)后的代碼在拋出異常后不再執(zhí)行也可以說異常的拋出終止了代碼段的執(zhí)行1155.捕獲異常(catch代碼段)catch代碼段聲明其能捕獲的異常類型,并包含處理該類型異常的代碼異??偸怯删嚯x產(chǎn)生異常最近的匹配catch代碼段處理catch(Exceptione)捕獲所有Exceptioncatch(Throwablet)捕獲Exception和Errortry{
可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){
處理異常的語句}……finally{
事后處理語句}1165.捕獲異常(續(xù)1)如果沒有相應(yīng)的異常處理,則異常被交給上一層try代碼段進(jìn)行處理異常處理的查找依據(jù)類型匹配原則順序進(jìn)行第一個(gè)匹配的異常處理被執(zhí)行,當(dāng)異常處理執(zhí)行完畢,程序接著最后一個(gè)catch代碼段后的語句執(zhí)行異常處理的順序影響到異常的處理子類異??杀桓割惍惓L幚聿东@不要先捕獲父類異常,再捕獲子類異常如果找不到相應(yīng)的異常處理非GUI程序結(jié)束程序執(zhí)行;Applet或GUI程序回復(fù)到事件處理狀態(tài)1176.finally代碼段用于及時(shí)釋放系統(tǒng)資源例如關(guān)閉文件刪除臨時(shí)文件總被執(zhí)行產(chǎn)生異常時(shí),異常處理完畢后執(zhí)行無異常產(chǎn)生時(shí),try代碼段執(zhí)行完畢后執(zhí)行
break,return,continuetry{
可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){
處理異常的語句}……finally{
事后處理語句}1187.throws語句用于方法定義中,表示一個(gè)方法可能拋出的異常publicintread()throwsIOException
1198.異常的分類Error:系統(tǒng)的嚴(yán)重錯(cuò)誤,一般由Java虛擬機(jī)監(jiān)測生成并拋出,它們包括動(dòng)態(tài)鏈接失敗、虛擬機(jī)錯(cuò)誤、線程死鎖等,Java程序?qū)λ鼈円话悴蛔鎏幚?。Exception:一般性程序故障,一般由用戶代碼或類庫生成并拋出,Java程序需要對它們進(jìn)行處理。RuntimeException:運(yùn)行時(shí)程序故障,例如被零除、數(shù)組下標(biāo)越界等。這些錯(cuò)誤可能在任何方法中產(chǎn)生,并且良好的程序應(yīng)該可以避免這些錯(cuò)誤。1209.Throwable類的方法Throwable()Throwable(Stringmessage)StringtoString()“classname”:“getMessage()”
StringgetMessage()StringgetLocalizedMessage()voidprintStackTrace()voidprintStackTrace(PrintStream
s)voidprintStackTrace(PrintWriters)ThrowablefillInStackTrace()ThrowableErrorExceptionRuntimeException12177:publicstaticvoidmain(String[]args){78:try{79:testThrowable();80:}81:catch(Throwablet){82:System.err.println(t.toString());83:System.err.println(t.getMessage());84:System.err.println(t.getLocalizedMessage());85:t.printStackTrace();86:}87:}…136:staticvoidtestThrowable()throwsThrowable{137:thrownewThrowable("測試Throwable的用法。");138:}java.lang.Throwable:測試Throwable的用法。測試Throwable的用法。測試Throwable的用法。java.lang.Throwable:測試Throwable
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024房產(chǎn)代理銷售合同samplewith傭金計(jì)算及支付條款
- 2024年高鐵項(xiàng)目綜合維修勞務(wù)分包合同
- 2024年賽事策劃與執(zhí)行服務(wù)標(biāo)準(zhǔn)協(xié)議版B版
- 2024年度航天設(shè)備租賃換售服務(wù)合同3篇
- 2024年網(wǎng)絡(luò)信息技術(shù)研發(fā)外包合同
- 2024版電梯安裝工程合同管理與履行監(jiān)督合同
- 2024年跨境貿(mào)易三方擔(dān)保合同示范文本3篇
- 2024評標(biāo)保密協(xié)議范本:智能電網(wǎng)建設(shè)專用3篇
- 專業(yè)實(shí)驗(yàn)設(shè)施短期租賃合同版B版
- 醫(yī)療廢物知識培訓(xùn)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之11:“5領(lǐng)導(dǎo)作用-5.5崗位、職責(zé)和權(quán)限”(雷澤佳編制-2025B0)
- 物聯(lián)網(wǎng)安全風(fēng)險(xiǎn)評估剖析-洞察分析
- 2024年-江西省安全員C證考試題庫
- 物業(yè)保安培訓(xùn)工作計(jì)劃
- 開題報(bào)告課件(最終)
- 治未病科室建設(shè)
- 期末測試卷-2024-2025學(xué)年外研版(一起)英語六年級上冊(含答案含聽力原文無音頻)
- 工廠廠房拆除合同范本
- 上海市浦東新區(qū)2023-2024學(xué)年一年級上學(xué)期期末考試數(shù)學(xué)試題
- 四位數(shù)乘四位數(shù)乘法題500道
- 船舶工業(yè)中長期發(fā)展規(guī)劃
評論
0/150
提交評論