Java異常概念
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,菏澤企業(yè)網(wǎng)站建設,菏澤品牌網(wǎng)站建設,網(wǎng)站定制,菏澤網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,菏澤網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1)Java異常是Java提供的用于處理程序錯誤的一種機制.
2)所謂錯誤時指在程序運行中發(fā)生的一些異常事件(如:除0溢出,數(shù)組下標越界,所要讀取的文件不存在)
3)設計良好的程序應該在異常發(fā)生時提供處理這些錯誤的方法,使得程序不會因為異常的發(fā)生而阻斷或產(chǎn)生不可預見的結(jié)果
4)Java程序的執(zhí)行過程中如果出現(xiàn)異常事件,可以生成一個異常類對象,該異常對象封裝了異常事件信息并將被提交給Java運行時系統(tǒng),這個過程被稱為拋出(throw)異常
5)當Java運行時系統(tǒng)接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為捕獲(catch)異常
Java異常的分類
J2SDK?中定義了很多異常類,這些類對映了各種各樣可能出現(xiàn)的異常事件
1)Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態(tài)連接失敗、虛擬機錯誤等,程序?qū)ζ洳蛔魈幚怼?/p>
2)Exception:所有異常的父類,其子類對應了各種各樣可能出現(xiàn)的異常事件,一般需要用戶顯示的聲明或捕獲
3)Runtime?Exception:一類特殊的異常,如被0除、數(shù)組下標超出范圍等,其產(chǎn)生比較頻繁,處理麻煩,如果現(xiàn)實的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此有系統(tǒng)自動檢測并將它們交給缺省的異常處理程序(用戶不必對其處理)
異常的捕獲和處理
1)try代碼段包含可能產(chǎn)生異常的代碼
2)try代碼段后跟有一個或多個catch代碼段
3)每個catch代碼段聲明其能處理的異常特定類型的異常并提供處理的方法
4)當異常發(fā)生時,程序會終止當前的流程,根據(jù)獲取異常的類去執(zhí)行相應的catch代碼
5)finally段的代碼無論是否發(fā)生異常都會執(zhí)行
使用自定義的異常
1)?通過幾成java.lang.Exception類聲明自己的異常
2)?在方法適當?shù)奈恢米詣由勺远x異常的實力,并用throw語句拋出
3)?在方法的聲明部分用throws語句聲明該方法可能拋出的異常
重寫方法需要拋出與原方法所拋出異常類型一致異常或不拋出異常
不要使用inputStream.available(),如果我沒有記錯的話,available返回的是沒有被阻斷的字節(jié)數(shù)(已經(jīng)被緩沖的內(nèi)容),可以嘗試read(byte b[])方法,然后通過返回值是否-1來判斷,如下。
int?bytesRead?=?inputStream.read(readBuffer);
while?(bytesRead?!=?-1)?{
readStr?+=?new?String(readBuffer).trim();
bytesRead?=?inputStream.read(readBuffer);
}
System (Java 2 Platform SE 5.0)
exit
public static void exit(int status)終止當前正在運行的 Java 虛擬機。參數(shù)用作狀態(tài)碼;根據(jù)慣例,非零的狀態(tài)碼表示異常終止。
該方法調(diào)用 Runtime 類中的 exit 方法。該方法永遠不會正常返回。
調(diào)用 System.exit(n) 實際上等效于調(diào)用:
Runtime.getRuntime().exit(n)
參數(shù):
status - 退出狀態(tài)。
拋出:
SecurityException - 如果安全管理器存在并且其 checkExit 方法不允許以指定狀態(tài)退出。
而且還有:
Runtime (Java 2 Platform SE 5.0)public void exit(int status)通過啟動虛擬機的關閉序列,終止當前正在運行的 Java 虛擬機。此方法從不正常返回。可以將變量作為一個狀態(tài)碼;根據(jù)慣例,非零的狀態(tài)碼表示非正常終止。
虛擬機的關閉序列包含兩個階段。在第一個階段中,會以某種未指定的順序啟動所有已注冊的關閉掛鉤(如果有的話),并且允許它們同時運行直至結(jié)束。在第二個階段中,如果已啟用退出終結(jié),則運行所有未調(diào)用的終結(jié)方法。一旦完成這個階段,虛擬機就會暫停。
如果在虛擬機已開始其關閉序列后才調(diào)用此方法,那么若正在運行關閉掛鉤,則將無限期地阻斷此方法。如果已經(jīng)運行完關閉掛鉤,并且已啟用退出終結(jié) (on-exit finalization),那么此方法將利用給定的狀態(tài)碼(如果狀態(tài)碼是非零值)暫停虛擬機;否則將無限期地阻斷虛擬機。
System.exit 方法是調(diào)用此方法的一種傳統(tǒng)而便捷的方式。
參數(shù):
status - 終止狀態(tài)。按照慣例,非零的狀態(tài)碼表明非正常終止。
拋出:
SecurityException - 如果安全管理器存在,并且其 checkExit 方法不允許存在指定的狀態(tài)
所以總結(jié)起來:System.exit(n)中的n可以是0、1、2、3等等不同的數(shù)值,但最終非零的狀態(tài)碼表示異常終止,只有是0的時候是正常退出。
下面是JDK中的代碼
public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
Shutdown.exit(status);
}
Shutdown中的靜態(tài)方法exit
static void exit(int status) {
boolean runMoreFinalizers = false;
synchronized (lock) {
if (status != 0) runFinalizersOnExit = false;
switch (state) {
case RUNNING: /* 0, Initiate shutdown */
state = HOOKS;
break;
case HOOKS: /* 1, Stall and halt */
break;
case FINALIZERS:
if (status != 0) {
/* Halt immediately on nonzero status */
halt(status);
} else {
/* Compatibility with old behavior:
* Run more finalizers and then halt
*/
runMoreFinalizers = runFinalizersOnExit;
}
break;
}
}
if (runMoreFinalizers) {
runAllFinalizers();
halt(status);
}
synchronized (Shutdown.class) {
/* Synchronize on the class object, causing any other thread
* that attempts to initiate shutdown to stall indefinitely
*/
sequence();
halt(status);
}
}
這個應該是你手動停止的,不是程序自己出的異常,程序執(zhí)行到該代碼時退出,后續(xù)代碼都不執(zhí)行
文章標題:java代碼阻斷 java阻止
URL地址:http://www.chinadenli.net/article48/dodooep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站建設、外貿(mào)建站、靜態(tài)網(wǎng)站、網(wǎng)站改版、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)