新聞中心
java項(xiàng)目中運(yùn)行錯(cuò)誤
Java異常概念
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),菏澤企業(yè)網(wǎng)站建設(shè),菏澤品牌網(wǎng)站建設(shè),網(wǎng)站定制,菏澤網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,菏澤網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1)Java異常是Java提供的用于處理程序錯(cuò)誤的一種機(jī)制.
2)所謂錯(cuò)誤時(shí)指在程序運(yùn)行中發(fā)生的一些異常事件(如:除0溢出,數(shù)組下標(biāo)越界,所要讀取的文件不存在)
3)設(shè)計(jì)良好的程序應(yīng)該在異常發(fā)生時(shí)提供處理這些錯(cuò)誤的方法,使得程序不會(huì)因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可預(yù)見的結(jié)果
4)Java程序的執(zhí)行過程中如果出現(xiàn)異常事件,可以生成一個(gè)異常類對(duì)象,該異常對(duì)象封裝了異常事件信息并將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過程被稱為拋出(throw)異常
5)當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過程稱為捕獲(catch)異常
Java異常的分類
J2SDK?中定義了很多異常類,這些類對(duì)映了各種各樣可能出現(xiàn)的異常事件
1)Error:稱為錯(cuò)誤,由Java虛擬機(jī)生成并拋出,包括動(dòng)態(tài)連接失敗、虛擬機(jī)錯(cuò)誤等,程序?qū)ζ洳蛔魈幚怼?/p>
2)Exception:所有異常的父類,其子類對(duì)應(yīng)了各種各樣可能出現(xiàn)的異常事件,一般需要用戶顯示的聲明或捕獲
3)Runtime?Exception:一類特殊的異常,如被0除、數(shù)組下標(biāo)超出范圍等,其產(chǎn)生比較頻繁,處理麻煩,如果現(xiàn)實(shí)的聲明或捕獲將會(huì)對(duì)程序可讀性和運(yùn)行效率影響很大。因此有系統(tǒng)自動(dòng)檢測(cè)并將它們交給缺省的異常處理程序(用戶不必對(duì)其處理)
異常的捕獲和處理
1)try代碼段包含可能產(chǎn)生異常的代碼
2)try代碼段后跟有一個(gè)或多個(gè)catch代碼段
3)每個(gè)catch代碼段聲明其能處理的異常特定類型的異常并提供處理的方法
4)當(dāng)異常發(fā)生時(shí),程序會(huì)終止當(dāng)前的流程,根據(jù)獲取異常的類去執(zhí)行相應(yīng)的catch代碼
5)finally段的代碼無論是否發(fā)生異常都會(huì)執(zhí)行
使用自定義的異常
1)?通過幾成java.lang.Exception類聲明自己的異常
2)?在方法適當(dāng)?shù)奈恢米詣?dòng)生成自定義異常的實(shí)力,并用throw語句拋出
3)?在方法的聲明部分用throws語句聲明該方法可能拋出的異常
重寫方法需要拋出與原方法所拋出異常類型一致異?;虿粧伋霎惓?/p>
java通過串口接收數(shù)據(jù),不正常。求大神指導(dǎo)
不要使用inputStream.available(),如果我沒有記錯(cuò)的話,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);
}
java代碼中,System.exit(1); 有什么作用?不是拋出異常之后就不會(huì)往下執(zhí)行了嗎?
System (Java 2 Platform SE 5.0)
exit
public static void exit(int status)終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。參數(shù)用作狀態(tài)碼;根據(jù)慣例,非零的狀態(tài)碼表示異常終止。
該方法調(diào)用 Runtime 類中的 exit 方法。該方法永遠(yuǎn)不會(huì)正常返回。
調(diào)用 System.exit(n) 實(shí)際上等效于調(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)通過啟動(dòng)虛擬機(jī)的關(guān)閉序列,終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。此方法從不正常返回??梢詫⒆兞孔鳛橐粋€(gè)狀態(tài)碼;根據(jù)慣例,非零的狀態(tài)碼表示非正常終止。
虛擬機(jī)的關(guān)閉序列包含兩個(gè)階段。在第一個(gè)階段中,會(huì)以某種未指定的順序啟動(dòng)所有已注冊(cè)的關(guān)閉掛鉤(如果有的話),并且允許它們同時(shí)運(yùn)行直至結(jié)束。在第二個(gè)階段中,如果已啟用退出終結(jié),則運(yùn)行所有未調(diào)用的終結(jié)方法。一旦完成這個(gè)階段,虛擬機(jī)就會(huì)暫停。
如果在虛擬機(jī)已開始其關(guān)閉序列后才調(diào)用此方法,那么若正在運(yùn)行關(guān)閉掛鉤,則將無限期地阻斷此方法。如果已經(jīng)運(yùn)行完關(guān)閉掛鉤,并且已啟用退出終結(jié) (on-exit finalization),那么此方法將利用給定的狀態(tài)碼(如果狀態(tài)碼是非零值)暫停虛擬機(jī);否則將無限期地阻斷虛擬機(jī)。
System.exit 方法是調(diào)用此方法的一種傳統(tǒng)而便捷的方式。
參數(shù):
status - 終止?fàn)顟B(tài)。按照慣例,非零的狀態(tài)碼表明非正常終止。
拋出:
SecurityException - 如果安全管理器存在,并且其 checkExit 方法不允許存在指定的狀態(tài)
所以總結(jié)起來:System.exit(n)中的n可以是0、1、2、3等等不同的數(shù)值,但最終非零的狀態(tài)碼表示異常終止,只有是0的時(shí)候是正常退出。
下面是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);
}
}
這個(gè)應(yīng)該是你手動(dòng)停止的,不是程序自己出的異常,程序執(zhí)行到該代碼時(shí)退出,后續(xù)代碼都不執(zhí)行
標(biāo)題名稱:java代碼阻斷 java阻止
鏈接URL:http://www.dlmjj.cn/article/dodooep.html