版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章Java高級(jí)編程知識(shí)點(diǎn):流線程
異常處理重點(diǎn)、難點(diǎn):文件字節(jié)流異常處理和自定義異常線程的創(chuàng)建和運(yùn)行關(guān)鍵詞:
InputStream、OutputStream、PrintStream
FileInputStream、FileOutputStream、
System.in、System.out
運(yùn)行時(shí)異常、非運(yùn)行時(shí)異常Throwable、ExceptionThrow、Throws
Thread、Runnable
一、流、輸入流、輸出流的概念1.關(guān)于流的定義不同的教材有不同的說法:流是指在計(jì)算機(jī)的輸入輸出之間流動(dòng)的一個(gè)數(shù)據(jù)序列,其從數(shù)據(jù)源串行地流向數(shù)據(jù)的目的地;流是傳遞數(shù)據(jù)信息的載體,是程序中數(shù)據(jù)所經(jīng)歷的路徑;
流是一種抽象的發(fā)送和接收數(shù)據(jù)的方法;
流是提供了一條通道的程序,可以使用這條通道把數(shù)據(jù)源中的數(shù)據(jù)傳送到目的地;
流是一組有序的有起點(diǎn)有終點(diǎn)的數(shù)據(jù)集合;
說法不同,但它們都圍繞著數(shù)據(jù)這個(gè)元素,考慮的問題是:數(shù)據(jù)數(shù)據(jù)從哪里來?數(shù)據(jù)到哪里去?同時(shí)也隱含指出了數(shù)據(jù)怎么來、數(shù)據(jù)怎么去的問題。
例如:全班同學(xué)要從桂林去南寧數(shù)據(jù):全班學(xué)生數(shù)據(jù)源(數(shù)據(jù)的來源):桂林目的地(數(shù)據(jù)的去處):南寧怎么從桂林來:公路鐵路空中航線怎么到南寧去:公路鐵路空中航線流
進(jìn)一步按來去方向分類:數(shù)據(jù):data
數(shù)據(jù)源:source
來的方法:
method11method12……..數(shù)據(jù):data目的地:destination
去的方法:
method21method22……..Java輸入流Java輸出流
2.輸入流:將數(shù)據(jù)從數(shù)據(jù)源傳給程序,這個(gè)數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接等。
數(shù)據(jù)源程序輸入流
3.輸出流:可將數(shù)據(jù)送到目的地,目的地可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接等
程序目的地輸出流
數(shù)據(jù)源輸入運(yùn)算輸出目的地輸入流Java程序設(shè)計(jì)中,輸入數(shù)據(jù)可以用輸入流從數(shù)據(jù)源中得到,輸出數(shù)據(jù)可以輸出流來輸送到目的地
程序輸出流
Java系統(tǒng)中根據(jù)數(shù)據(jù)的來源和去處的不同,提供了一系列的輸入流和輸出流類,統(tǒng)一組織在java.io包中,編程時(shí)利用它們,實(shí)現(xiàn)不同的輸入/輸出的數(shù)據(jù)處理。
二、字節(jié)流1、概述
輸入字節(jié)流部分類的繼承關(guān)系圖
輸出字節(jié)流部分類的繼承圖m字節(jié)輸入流類:InputStream
字節(jié)輸出流類:OutputStream它們是所有字節(jié)流的父類,是將數(shù)據(jù)以字節(jié)為基本處理單位的流它們是抽象類,實(shí)際編程中使用它們的子類
2、相關(guān)設(shè)計(jì)模式
Java的字節(jié)流在第一層子類上采用了適配器(Adapter)模式在第二層子類上采用了裝飾(Decorator)模式。這些模式的使用使得Java的I/O流在使用上具有與眾不同的特點(diǎn)。
1)適配器(Adapter)模式適配器模式類圖
問題:什么情況下使用Adapter模式??jī)蓚€(gè)不同的類或接口,但功能相同或相近,用適配器模式將兩個(gè)類加以轉(zhuǎn)換,還可以補(bǔ)充源沒有的方法,而目標(biāo)需要的方法。例:一個(gè)老師會(huì)講課(只會(huì)用中文),也能完成項(xiàng)目工程,另一個(gè)工程師會(huì)用英語上課,利用他們兩個(gè)人來完成用英語上課,同時(shí)又完成工程項(xiàng)目.
classTeacher{
Stringname;
publicvoidspeck(){
System.out.println(“這個(gè)技術(shù)的難點(diǎn)是:。。。。");}publicvoiddoProject(){
System.out.println(“完成了項(xiàng)目工程");}}classEngineer{
Stringname;
publicvoidspeck(){
System.out.println(“thedifficultyofthisTechnologyis:…..");}}
classAdaextendsTeacher{Engineerobj;
intage;
publicvoidspeck(){
obj=newEngineer();
obj.speck();
obj.doProject();}
}
publicclassUser{
publicstaticvoidmain(String
args[]){
Teachersm=newAda();
sm.speck();
sm.doProject();}}
publicclassUser1{
publicstaticvoidmain(String
args[]){
Teachersm=newTeacher();
sm.speck();
sm.doProject();}}
FileInputStream是一個(gè)適配器類適配器FileInputStream類圖
2)裝飾(Decorator)模式
DataInputStream等類是具體的裝飾類
DataOutputStream等類是具體的裝飾類
看下圖:
兼職的學(xué)生:如果要增加學(xué)生的功能或職責(zé),可采用裝飾模式進(jìn)行擴(kuò)展
三。字節(jié)流的使用
1.InputStream與OutputStream
InputStream是字節(jié)輸入流,它包含的三面的信息是:數(shù)據(jù):字節(jié)用于程序從數(shù)據(jù)源中獲取數(shù)據(jù)主要方法:
InputStream類的主要方法:abstractintread():從輸入流中讀取一個(gè)字節(jié),返回0到255之間的一個(gè)數(shù),遇到結(jié)尾返回-1。int
read(byteb[]):從輸入流中讀取長(zhǎng)度為b.length的字節(jié)數(shù)到b,并返回讀取字節(jié)數(shù)。遇到結(jié)尾返回-1。intread(byteb[],int
off,int
len):從輸入流中讀取長(zhǎng)度為len的字節(jié)數(shù)到off開始的數(shù)組b,并返回讀取字節(jié)數(shù)。遇到結(jié)尾返回-1。
OutputStream是字節(jié)輸出流,它包含的三面的信息是:數(shù)據(jù):字節(jié)用于將數(shù)據(jù)送到目的地主要方法:
OutputStream類的主要方法:abstractvoidwrite(intb):將指定的字節(jié)b寫入輸出流,如果b>255,則只寫入其低位字節(jié)。voidwrite(byteb[]):把字節(jié)數(shù)組b中的b.length個(gè)字節(jié)寫入輸出流。voidwrite(byteb[],int
off,int
len):把字節(jié)數(shù)組b中off開始長(zhǎng)度為len個(gè)字節(jié)寫入輸出流。
2。File類:并不屬于流,但主要應(yīng)用于流技術(shù)中,所以Java把它放入了java.io包中
計(jì)算機(jī)文件基本上分為二種:二進(jìn)制文件和ASCII碼(也稱純文本)文件,除了純文本文件外,其它的所有文件都是二進(jìn)形式的文件,例如圖形文件JPG、GIF等及文字處理文件如word,Excel等文件等都屬于二進(jìn)制文件,這些文件含有特殊的格式及計(jì)算機(jī)代碼,需要專門的軟件才能打開進(jìn)行查看。而文本文件則可由任意軟件處理。
File類
構(gòu)造方法:
File(Stringname)
File(String
path,Stringname)
File(File
file,Stringfilename)
3。FileInputStream和FileOutputStream
FileInputStream是文件字節(jié)輸入流,它包含的三方面的信息是:數(shù)據(jù):字節(jié)用于程序從數(shù)據(jù)源---文件中獲取數(shù)據(jù)主要方法:重寫或繼承于父類
主要構(gòu)造方法:
FileInputStream(Stringname)
FileInputStream(File
fileObject)它們有可能引發(fā)FileNotFoundException異常
例讀取文本文件的內(nèi)容并顯示輸出思考過程:初始建模
為了滿足“開---閉”原則,進(jìn)一步抽象
例9_1
importjava.io.*;publicclassReadTextFile{StringfileName;//要讀取的文件名
publicReadTextFile(){}publicReadTextFile(Strings){
fileName=s;
}
publicStringread1(){
try{Filef=newFile(fileName);
FileInputStreamfin=new
FileInputStream(f);byte[]b=newbyte[(int)f.length()];Strings=null;
fin.read(b);s=newString(b);returns;}catch(Exception
e){returnnull;}}
publicStringread1(Stringfn){try{Filef=newFile(fn);
FileInputStreamfin=newFileInputStream(f);byte[]b=newbyte[(int)f.length()];Strings=null;
fin.read(b);s=newString(b);returns;}catch(IOException
e){returnnull;}}}
publicStringoutPut(){return("文件"+fileName+"的內(nèi)容是:"+read1());}}
publicclassUser{
publicstaticvoidmain(String
args[]){
try{
ReadTextFile
obj=newReadTextFile("a.txt");
System.out.println(obj.outPut());
ReadTextFileobj1=newReadTextFile("User.java");Strings1=obj1.read1();System.out.println(s1);}catch(Exceptione){}}}
注意:
1.從文件輸入流中讀文本文件到顯示器輸出的方法
2.一般只有純文本文件才考慮采用上述方法輸出到顯示器進(jìn)行查看,二進(jìn)制文件不能直接地輸出到顯示器,因這它們是需要特殊的軟件才能打開的。
如果上例把Filef=newFile(“a.txt”);改成Filef=newFile(“a.doc”);會(huì)有什么輸出結(jié)果?
FileOutputStream類
OutputStream是字節(jié)輸出流,它包含的三面的信息是:數(shù)據(jù):字節(jié)用于將數(shù)據(jù)送到目的地---文件主要方法:重寫或繼承了父類的方法
主要的構(gòu)造方法:FileOutputStream(Stringname)FileOutputStream(String
name,booleanappend)FileOutputStream(File
fileObj)它們有可能引發(fā)IOException或SecurityException
例將文本文件的內(nèi)容寫入文件思考過程:初始建模
importjava.io.*;publicclassWriteTextFile{StringwriteFileName;
publicWriteTextFile(){}publicWriteTextFile(Stringsout){
writeFileName=sout;}
publicvoidgetOutPut(Strings){
try{Filef=newFile(writeFileName);
FileOutputStream
fout=new
FileOutputStream(f);
fout.write(s.getBytes());
fout.close();}
catch(IOExceptione){}}
publicStringread1(Stringfn){try{
FileInputStreamfin=new
FileInputStream(fn);byte[]b=newbyte[(int)f.length()];Strings=null;
fin.read(b);s=newString(b);returns;}catch(IOException
e){returnnull;}}
4.DataInputStream和
DataOutputStream
它可以按java的數(shù)據(jù)類型讀取數(shù)據(jù)構(gòu)造方法:
DataInputStream(InputStreamins);
DataOutputStream(OutputStreamouts);
DataInputStream主要方法:
int
readInt()bytereadByte()longreadLong()StringreadUTF()
boolean
readBoolean()
int
readInt()floatreadFloat()shortreadShort()charreadChar()
DataOutputStream主要方法:
voidwrite(byteb[])voidwriteInt(intb)voidwriteShort(shortb)voidwriteLong(longl)voidwriteChar(charc)voidwriteFloat(floatf)voidwriteDouble(doublef)voidwriteUTF(Strings)voidwriteBoolean(booleanb)
例:將電話號(hào)碼(長(zhǎng)整型數(shù))存入文件中
importjava.io.*;publicclassWriteFile{Strings;//文件名
publicWriteFile(){}publicWriteFile(Stringsout){
s=sout;}
publicvoidwrite1(longphone_number){try{Filef=newFile(s);
OutputStream
fout=newFileOutputStream(s);
DataOutputStream
dout=new
DataOutputStream(fout);
dout.writeLong(phone_number);
dout.close();}
catch(IOExceptione){}}
publicvoidwrite1(StringfileName,longph){try{Filef=newFile(fileName);
OutputStream
fout=newFileOutputStream(f);
DataOutputStream
dout=newDataOutputStream(fout);
dout.writeLong(ph);
dout.close();}
catch(IOExceptione){}}publiclongread1(StringfileName){longph=0;try{Filef=newFile(fileName);
InputStreamfin=newFileInputStream(f);
DataInputStreamdin=newDataInputStream(fin);ph=din.readLong();
din.close();}
catch(IOExceptione){}
finally{returnph;}}}
importjava.util.*;publicclassUseWriteFile{
publicstaticvoidmain(String
args[]){
try{Scannersc=newScanner(System.in);
System.out.println("請(qǐng)輸入你要存入文的內(nèi)容:");Stringinf=sc.nextLine();Longph=Long.parseLong(inf);
WriteFile
obj=newWriteFile("a.dat");obj.write1(ph);
System.out.println("已存入文件");System.out.println(obj.read1("a.dat"));}catch(Exceptione){}}}
5。標(biāo)準(zhǔn)輸入/輸出流對(duì)象
Java的System類中定義的類變量:
publicstaticPrintStreamout;publicstaticInputStreamin;
System.in:它是由系統(tǒng)自動(dòng)創(chuàng)建的InputStream的一個(gè)輸入流對(duì)象,用來接收鍵盤的輸入的數(shù)據(jù)。System.out:它是OutputStream的子類PrintStream的一個(gè)輸出流對(duì)象,能夠輸出數(shù)據(jù)到顯示器。
.字節(jié)輸出流PrintStream:可以輸出各種類型的數(shù)據(jù)
構(gòu)造方法:
PrintStream(OutputStreamout);
在其父類OutputStream上增加的主要方法:
voidprintln()
voidprintln(booleanb)
voidprintln(charc)
voidprintln(char[]c)
voidprintln(doubled)
voidprintln(floatf)
voidprintln(inti)
voidprintln(longl)
voidprintln(Objectobj)
voidprintln(Stringstr)將各種類型的數(shù)據(jù)輸出到輸出流
四.序列化(串行化或可持續(xù)化)
序列化是把一個(gè)對(duì)象的狀態(tài)保存起來;從該區(qū)域讀取對(duì)象狀態(tài)即稱為反序列化。實(shí)現(xiàn)了Serializable接口的類的對(duì)象才可以序列化。
Serializable接口中沒有任何方法,只是做為一個(gè)標(biāo)記來指示該類的對(duì)象可以序列化
主要由以下兩個(gè)類實(shí)現(xiàn):
ObjectOutputStream
ObjectInputStream
向流寫入對(duì)象和從流中讀取對(duì)象
構(gòu)造方法:
ObjectOutputStream(OutputStream
os);
ObjectInputStream(InputStreamis);
ObjectInputStream主要方法:
ObjectreadObject()
ObjectOutputStream主要方法:
writeObject(Object
obj)
例將學(xué)生信息的內(nèi)容寫入文件思考過程:初始建模
importjava.io.*;classStudentimplementsSerializable{ Stringname;String
password;intage;publicStudent(){ Stringname="2";Stringpassword="2";intage=20; } publicStudent(String
name,String
password,intage){
=name;
this.password=password;
this.age=age; } publicvoidsetPassword(Stringpass){
this.password=pass; }publicStringgetPassword(){ returnpassword; }publicvoidsetName(Stringname){
=name; }publicStringgetName(){ returnname; }publicvoidsetAge(intage){
this.age=age; }publicint
getAge(){ returnage; }}
publicclassUseObjectStream{publicObjectread1(StringfileName){try{
FileInputStream
fis=newFileInputStream(fileName);
ObjectInputStream
ois=newObjectInputStream(fis); returnois.readObject();}
catch(Exception
e){returnnull;}
}publicvoidwrite1(StringfileName,Object
obj){try{
FileOutputStream
fos=newFileOutputStream(fileName,true);
ObjectOutputStream
obs=newObjectOutputStream(fos);
obs.writeObject(obj);}
catch(Exceptione){} }}
importjava.io.*;publicclassUser{ publicstaticvoidmain(String
args[]){ Students1=newStudent("Tom","111",21);
UseObjectStream
vip=newUseObjectStream(); try{ vip.write1("customer.obj",s1);
System.out.println("用戶信息寫入文件"); Studentvip1=(Student)vip.read1("customer.obj");
System.out.println("文件中的信息為:");
System.out.println("用戶名:"+vip1.getName());
System.out.println("密碼:"+vip1.getPassword());
System.out.println("年齡:"+vip1.getAge());
} catch(Exceptione){
e.printStackTrace(); }}}
五.Scanner類Scanner是JDK1.5新增的一個(gè)類,是java.util包中的類。該類用來實(shí)現(xiàn)用戶的輸入;
構(gòu)造方法:(1)Scanner(InputStreamin)
(2)Scanner(Filefile)
主要方法:將控制臺(tái)輸入信息掃描為相應(yīng)的數(shù)值
Stringnext()StringnextLine()
boolean
nextBoolean()
bytenextByte()
doublenextDouble()
floatnextFloat()
int
nextInt()
longnextLong()
shortnextShort()
異常相關(guān)知識(shí)一.引入class旅游{publicstaticvoidmain(String[]args){
買票;//可能買不到坐車;//可能路途中車壞了
住宿;//可能找不到住處}}問題:未對(duì)可能的出現(xiàn)的問題進(jìn)行處理,此時(shí)如果出現(xiàn)問題,旅游將會(huì)被迫終止.class旅游{publicstaticvoidmain(String[]args){
買票;//可能買不到
if(買不到){……}
坐車;//可能路途中車壞了
if(車壞了){……..}
住宿;//可能找不到住處
if(找不到住處){……..}}}
缺點(diǎn):1)模糊了問題求解的邏輯,要考慮大量非正常的情況并做出處理,有時(shí)這種情況出現(xiàn)的機(jī)會(huì)很少,這使得程序設(shè)計(jì)變得復(fù)雜。2)程序員對(duì)非正常問題的處理的能力在很大程度上影響編程工作效率和質(zhì)量。3)層層處理太麻煩,程序可讀性降低。二、異常程序設(shè)計(jì)時(shí)把可以預(yù)見的非正?,F(xiàn)象稱為異常。這種異常程序是可以處理的。
在完成特定功能的同時(shí),具有完善的異常處理能力才是合格的,具有健壯性的程序。
1.Java的異常處理異常處理就是允許用戶有排除錯(cuò)誤的機(jī)會(huì),或至少能給出適當(dāng)?shù)某鲥e(cuò)提示信息。
Java中定義了很多異常類,用來描述經(jīng)常較容易發(fā)生的錯(cuò)誤,當(dāng)程序運(yùn)行時(shí)發(fā)生了該類異常,就產(chǎn)生一個(gè)收集了異常信息的異常對(duì)象,我們通過捕捉或拋出來處理這個(gè)對(duì)象。
通過異常處理機(jī)制處理程序中可能發(fā)生的問題:
class旅游{publicstaticvoidmain(String[]args){try{買票;
坐車
住宿;}
catch(Exceptione){給出各種錯(cuò)誤處理的信息和處理方法等;}}}
這些類都繼承自java.lang.Throwable類。Throwable類有兩個(gè)子類:Error和Exception,它們分別表示兩種異常類型?!?Error類及其子類通常用來描述Java運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤以及資源耗盡的錯(cuò)誤。Error表示的異常是比較嚴(yán)重,僅靠修改程序本身是不能恢復(fù)執(zhí)行的,被稱為致命異常類。例如,前面所說的旅游,因?yàn)橄肴ヂ糜蔚娜嗽诼猛局袥]有錢了,或者受傷了…….此時(shí)就相當(dāng)于發(fā)生了一個(gè)Error異常。在大多數(shù)情況下,發(fā)生該異常時(shí),建議終止程序。Exception類可稱為非致命異常類,在開發(fā)Java程序過程中進(jìn)行的異常處理,主要就是針對(duì)該類及其子類的異常處理。對(duì)程序中可能發(fā)生的該類異常,應(yīng)該盡可能進(jìn)行處理,而不應(yīng)該在異常發(fā)生后終止程序。Exception類又分為兩種異常類型:運(yùn)行時(shí)異常(RuntimeException)非運(yùn)行時(shí)異常
三、異常類Exception
構(gòu)造函數(shù)
publicException();publicException(Strings);
常用方法:publicStringtoString()publicStringgetMessage()
1.RuntimeException可以預(yù)料,但不知何時(shí)何地發(fā)生,例如:旅游過程中坐公共汽車不買票,吃飯不給錢……這種異常一般不用處理,處理的開銷太大,如果發(fā)生Java虛擬機(jī)系統(tǒng)會(huì)自動(dòng)處理。
常見的RuntimeException異常如下表所示:異常類名稱異常類含義ArithmeticException算術(shù)異常類ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界異常類ArrayStoreException將與數(shù)組類型不兼容的值賦值給數(shù)組元素時(shí)拋出的異常ClassCastException類型強(qiáng)制轉(zhuǎn)換異常類IndexOutOfBoundsException當(dāng)某對(duì)象(如數(shù)組或字符串)的索引超出范圍時(shí)拋出該異常NegativeArraySizeException建立元素個(gè)數(shù)為負(fù)數(shù)的數(shù)組異常類NullPointerException空指針異常類NumberFormatException字符串轉(zhuǎn)換為數(shù)字異常類SecurityException小應(yīng)用程序(Applet)執(zhí)行瀏覽器的安全設(shè)置禁止的動(dòng)作時(shí)拋出的異常StringIndexOutOfBoundsException字符串索引超出范圍異常2。非運(yùn)行時(shí)異??梢灶A(yù)料,知道何時(shí)何地可能會(huì)發(fā)生,如:旅游過程中買不到票,找不到住處……,出現(xiàn)這種情況時(shí)要求通過try…catch捕獲或由throws拋出。Java語言中常見的非運(yùn)行時(shí)異常如下表所示:異常類名稱異常類含義ClassNotFoundException未找到相應(yīng)類異常EOFException文件已結(jié)束異常類FileNotFoundException文件未找到異常類IllegalAccessException訪問某類被拒絕時(shí)拋出的異常InstantiationException試圖通過newInstance()方法創(chuàng)建一個(gè)抽象類或抽象接口的實(shí)例時(shí)拋出該異常IOException輸入輸出異常類NoSuchFieldException字段未找到異常NoSuchMethodException方法未找到異常SQLException操作數(shù)據(jù)庫異常類四、異常處理的方式
對(duì)運(yùn)行異??梢圆蛔鎏幚?,也就是說程序設(shè)計(jì)時(shí)不需要增加異常處理語句,Java虛擬機(jī)系統(tǒng)會(huì)自動(dòng)進(jìn)行處理;但是如果你能確定它發(fā)生的時(shí)間和地點(diǎn),你也可以對(duì)它進(jìn)行處理。
對(duì)非運(yùn)行時(shí)異常,則需要進(jìn)行處理,否則編譯通不過。
1.捕捉異常:
程序設(shè)計(jì)時(shí)使用try-catch-finally語句進(jìn)行處理
語法格式:try{代碼0(可能產(chǎn)生異常的代碼)}catch(例外類1e){例外處理代碼1;}…catch(例外類ne){例外處理代碼n;}finally{必須執(zhí)行的代碼;}
importjava.io.*;classTryCatchTest{publicstaticvoidmain(String
agrs[]){Filefile=newFile("abc.txt");
inta[]={1,2};try{System.out.println(3/0);}
catch(ArithmeticExceptione){System.out.println("3/0");
System.out.println("ThisisArthmeticException");}try{System.out.println(a[2]);}
catch(ArrayIndexOutOfBoundsExceptione){System.out.println("a[2]");
System.out.println("ThisisArrayIndexOutOfBoundsException");}
try{FileInputStreamfin=newFileInputStream(file);}
catch(FileNotFoundExceptione){
System.out.println("abc.txtisnotfound");
System.out.println("ThisisFileNotFoundException");}
catch(IOExceptione){
System.out.println("ThisisIOException");}
}}2.通過throws語句聲明拋出,交給調(diào)用它的方法進(jìn)行處理
這時(shí)方法的定義格式:
方法名([參數(shù)表])throws例外名列表
publicclassPeople{ publicint
check(String
strage)throwsException{
intage=Integer.parseInt(strage);
if(age<0) thrownewException(“年齡不能為負(fù)數(shù)!”); returnage; }}classUsePeople{ publicstaticvoidmain(String[]args){ try{ Peoplep=newPeople();
int
myage=p.check("-101");
System.out.println(myage); }catch(Exceptione){
System.out.println("數(shù)據(jù)邏輯錯(cuò)誤!");
System.out.println("原因:"+e.getMessage()); } }}五、自定義異常
步驟:1、創(chuàng)建繼承Exception的異常類,主要定義構(gòu)造方法和重寫toString()方法,目的是給出適當(dāng)?shù)某鲥e(cuò)提示信息,讓用戶有機(jī)會(huì)排除錯(cuò)誤。
publicclassE1extendsException{privateStringmessage;publicE1(Strings){message=s;}publicStringtoString(){returnmessage;}2、定義某一個(gè)方法在一定條件下產(chǎn)生這種異常對(duì)象,并用throws語句拋出該對(duì)象。
方法定義格式:
[修飾符]返回類型方法名(參數(shù)。。。)throws自定義異常
{if(…..)throw(自定義的異常對(duì)象)……}
3、其它方法調(diào)用該方法例:
testimportjava.io.*;classMyExp1extendsException{publicStringtoString(){return"自已定義的異常產(chǎn)生了";}}publicclassTest{publicvoidlogin(Stringa)throwsMyExp1{if(a.equals("李明")){MyExp1e=newMyExp1();throwe;}
}publicstaticvoidmain(String
arg[]){try{Testt1=newTest();t1.login("李明");}catch(MyExp1e){System.out.println(e.toString());}}}
線程相關(guān)知識(shí)
一、引入看一個(gè)例子:
classParent{StringpName;publicStringdoHousework(String
dosomething){return(dosomething);}}
publicclassStudent{StringsName;publicStringdoHomework(Stringsubject){return“完成”+subject;}}
classUseStudent{ publicstaticvoidmain(String
args[]){ Studenta=newStudent();
a.sName="李小明";Parentb=newParent();
b.pName="李大明";
System.out.println(a.doHomework(“語文作業(yè)!”));
System.out.println(b.doHousework(“拖地板"));}}二、線程的創(chuàng)建
Java語言中,線程也是一種對(duì)象,但并非任何對(duì)象都可以成為線程,只有實(shí)現(xiàn)Runnable接口或繼承了Thread類的對(duì)象才能成為線程。
兩種線程的實(shí)現(xiàn)方法:1.繼承Thread類
classParentextendsThread{StringpName;publicStringdoHousework(String
dosomething){return(dosomething);}
publicvoidrun(){try{
System.out.println(pName+doHousework(“拖地板"));
Thread.sleep(1000); }catch(Exceptione){
e.printStackTrace(); }}}
publicclassStudentextendsThread{StringsName;
publicStringdoHomework(Stringsubject){return"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《不良生活習(xí)慣》課件
- 2024年版特定股權(quán)轉(zhuǎn)讓與業(yè)績(jī)保障協(xié)議版B版
- 房本除名登記協(xié)議書
- 2024年新型數(shù)字媒體內(nèi)容制作與傳播采購合同3篇
- 2025年綏化貨車資格證考試題
- 《狼性臧其超作品》課件
- 2025年萊蕪駕??荚囏涍\(yùn)從業(yè)資格證模擬考試
- 2025年聊城道路運(yùn)輸從業(yè)人員從業(yè)資格考試
- 2025年防城港貨運(yùn)從業(yè)資格證考試題庫答案
- 《初中作文結(jié)構(gòu)篇圖》課件
- 專題02 地球上的大氣-備戰(zhàn)2025年高考地理真題題源解密(新高考用)(解析版)
- 二手房購房協(xié)議書范本2024年
- 《食品加工技術(shù)》 課件 模塊五、項(xiàng)目二、豆制品加工
- 星星火炬代代相傳國旗下講話稿
- 2023版國開電大本科《高級(jí)財(cái)務(wù)會(huì)計(jì)》在線形考(任務(wù)一至四)試題及答案
- 電動(dòng)叉車充電間(區(qū)域)方面的標(biāo)準(zhǔn)要求
- 戶外照明亮化工程勞動(dòng)力安排計(jì)劃
- 2022年青島幼兒師范高等專科學(xué)校教師招聘考試試題及答案
- 非遺文化南音介紹
- 板式換熱器對(duì)數(shù)平均溫差計(jì)算公式
- 體育初中學(xué)生學(xué)情分析總結(jié)報(bào)告
評(píng)論
0/150
提交評(píng)論