JAVA 輸入輸出異常線程_第1頁
JAVA 輸入輸出異常線程_第2頁
JAVA 輸入輸出異常線程_第3頁
JAVA 輸入輸出異常線程_第4頁
JAVA 輸入輸出異常線程_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論