自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java三種常見異常及解決

開發(fā) 后端
對(duì)于Java的常見異常,程序開發(fā)人員要從兩個(gè)方面去了解。一是要知道有哪些常見的Java應(yīng)用程序異常,二是需要知道哪些原因可能會(huì)造成這個(gè)異常。

異常跟普通的警告等有一定的區(qū)別。當(dāng)應(yīng)用程序發(fā)生異常時(shí),會(huì)中斷正在執(zhí)行的程序的正常指令流。也就是說,發(fā)生異常后面的代碼將得不到正確的執(zhí)行。甚至還會(huì)觸發(fā)數(shù)據(jù)庫的回退操作。

在Java的常見異常中,異常包括預(yù)定義異常與自定義異常。這兩種異常的類型互為補(bǔ)充。作為一個(gè)合格的程序開發(fā)人員,要善于在應(yīng)用程序中使用異常。這可以提高應(yīng)用程序的交互性。同時(shí),也是保證應(yīng)用程序正常運(yùn)行的前提。故異常的處理對(duì)于開發(fā)一個(gè)優(yōu)秀的應(yīng)用程序來說非常的重要。為此筆者認(rèn)為程序開發(fā)人員應(yīng)該對(duì)Java應(yīng)用程序的常見異常有一個(gè)深入的了解。只有在了解這些常見異常的情況下,才能夠做好自定義異常的處理。

一、Java常見異常的類型與原因。

對(duì)于Java應(yīng)用程序的常見異常,筆者認(rèn)為程序開發(fā)人員要從兩個(gè)方面去了解。一是要知道有哪些常見的Java應(yīng)用程序異常,二是需要知道哪些原因可能會(huì)造成這個(gè)異常。這不僅需要程序管理人員在日常工作中要注意積累,在必要的情況下還需要去從其它渠道收集資料。筆者對(duì)此就進(jìn)行一個(gè)分析,希望能夠?qū)Ω魑怀绦蜷_發(fā)人員有一定的幫助。

1、 SQLException:操作數(shù)據(jù)庫異常類

現(xiàn)在的Java應(yīng)用程序大部分都是依賴于數(shù)據(jù)庫運(yùn)行的。當(dāng)Java應(yīng)用程序與數(shù)據(jù)庫進(jìn)行溝通時(shí)如果產(chǎn)生了錯(cuò)誤,就會(huì)觸發(fā)這個(gè)類。同時(shí)會(huì)將數(shù)據(jù)庫的錯(cuò)誤信息通過這個(gè)類顯示給用戶。也就是說,這個(gè)操作數(shù)據(jù)庫異常類是數(shù)據(jù)庫與用戶之間異常信息傳遞的橋梁。如現(xiàn)在用戶往系統(tǒng)中插入數(shù)據(jù),而在數(shù)據(jù)庫中規(guī)定某個(gè)字段必須唯一。當(dāng)用戶插入數(shù)據(jù)的時(shí)候,如果這個(gè)字段的值跟現(xiàn)有的紀(jì)錄重復(fù)了,違反了數(shù)據(jù)庫的唯一性約束,此時(shí)數(shù)據(jù)庫就會(huì)跑出一個(gè)異常信息。這個(gè)信息一般用戶可能看不到,因?yàn)槠浒l(fā)生在數(shù)據(jù)庫層面的。此時(shí)這個(gè)操作數(shù)據(jù)庫異常類就會(huì)捕捉到數(shù)據(jù)庫的這個(gè)異常信息,并將這個(gè)異常信息傳遞到前臺(tái)。如此的話,前臺(tái)用戶就可以根據(jù)這個(gè)異常信息來分析發(fā)生錯(cuò)誤的原因。這就是這個(gè)操作數(shù)據(jù)庫異常類的主要用途。在Java應(yīng)用程序中,所有數(shù)據(jù)庫操作發(fā)生異常時(shí),都會(huì)觸發(fā)這一個(gè)類。所有此時(shí)Java應(yīng)用程序本身的提示信息往往過于籠統(tǒng),只是說與數(shù)據(jù)庫交互出現(xiàn)錯(cuò)誤,沒有多大的參考價(jià)值。此時(shí)反而是數(shù)據(jù)庫的提示信息更加有使用價(jià)值。

2、 ClassCastException:數(shù)據(jù)類型轉(zhuǎn)換異常。

在Java應(yīng)用程序中,有時(shí)候需要對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。這個(gè)轉(zhuǎn)換包括顯示的轉(zhuǎn)換與隱式的轉(zhuǎn)換。不過無論怎么轉(zhuǎn)換,都必須要符合一個(gè)前提的條件,即數(shù)據(jù)類型的兼容性。如果在數(shù)據(jù)轉(zhuǎn)換的過程中,違反了這個(gè)原則,那么就會(huì)觸發(fā)數(shù)據(jù)類型轉(zhuǎn)換異常。如現(xiàn)在在應(yīng)用程序中,開發(fā)人員需要將一個(gè)字符型的日期數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)庫所能夠接受的日期型數(shù)據(jù),此時(shí)只需要在前臺(tái)應(yīng)用程序中進(jìn)行控制,一般不會(huì)有問題。但是,如果前臺(tái)應(yīng)用程序缺乏相關(guān)的控制,如用戶在輸入日期的時(shí)候只輸入月、日信息,而沒有年份的信息。此時(shí)應(yīng)用程序在進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的時(shí)候,就會(huì)出現(xiàn)異常。根據(jù)筆者的經(jīng)驗(yàn),數(shù)據(jù)類型轉(zhuǎn)換異常在應(yīng)用程序開發(fā)中使一個(gè)出現(xiàn)的比較多的異常,也是一個(gè)比較低級(jí)的異常。因?yàn)榇蟛糠智闆r下,都可以在應(yīng)用程序窗口中對(duì)數(shù)據(jù)類型進(jìn)行一些強(qiáng)制的控制。即在數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換之前,就保證數(shù)據(jù)類型的兼容性。如此的話,就不容易造成數(shù)據(jù)類型的轉(zhuǎn)換異常。如在只允許數(shù)值類型的字段中,可以設(shè)置不允許用戶輸入數(shù)值以外的字符。雖然說有了異常處理機(jī)制,可以保證應(yīng)用程序不會(huì)被錯(cuò)誤的運(yùn)行。但是在實(shí)際開發(fā)中,還是要盡可能多的預(yù)見錯(cuò)誤發(fā)生的原因,盡量避免異常的發(fā)生。

3、NumberFormatException:字符串轉(zhuǎn)換為數(shù)字類型時(shí)拋出的異常

在數(shù)據(jù)類型轉(zhuǎn)換過程中,如果是字符型轉(zhuǎn)換為數(shù)字型過程中出現(xiàn)的問題,對(duì)于這個(gè)異常在Java程序中采用了一個(gè)獨(dú)立的異常,即NumberFormatException。如現(xiàn)在講字符型的數(shù)據(jù)“123456”轉(zhuǎn)換為數(shù)值型數(shù)據(jù)時(shí),是允許的。但是如果字符型數(shù)據(jù)中包含了非數(shù)字型的字符,如123#56,此時(shí)轉(zhuǎn)換為數(shù)值型時(shí)就會(huì)出現(xiàn)異常。系統(tǒng)就會(huì)捕捉到這個(gè)異常,并進(jìn)行處理。

Java常見的異常類還有很多。如未找到相應(yīng)類異常、不允許訪問某些類異常、文件已經(jīng)結(jié)束異常、文件未找到異常、字段未找到異常等等。一般系統(tǒng)開發(fā)人員都可以根據(jù)這個(gè)異常名來判斷當(dāng)前異常的類型。雖然不錯(cuò),但是好記性不如爛筆頭。程序開發(fā)人員在必要的時(shí)候(特別是存在自定義異常的時(shí)候),***手頭有一份異常明細(xì)表。如此的話,無論是應(yīng)用程序在調(diào)試過程中發(fā)現(xiàn)問題,還是運(yùn)行過程中接到用戶的投訴,都可以及時(shí)的根據(jù)異常名字來找到異常發(fā)生的原因。從而可以在最短時(shí)間內(nèi)解決異常,恢復(fù)應(yīng)用程序的正常運(yùn)行。這個(gè)措施筆者用了很多年,非常的有效。

二、異常管理的實(shí)用建議

對(duì)于操作數(shù)據(jù)庫異常來說,Java應(yīng)用程序只提供了一個(gè)異常類。故光憑Java應(yīng)用程序的錯(cuò)誤信息,往往不能夠幫助應(yīng)用程序人員排除錯(cuò)誤的原因。只能夠指名是應(yīng)用程序錯(cuò)誤還是數(shù)據(jù)庫錯(cuò)誤導(dǎo)致的這個(gè)異常。為了更進(jìn)一步指明問題的原因,在數(shù)據(jù)庫層面定義異常的時(shí)候,***能夠說明具體的原因。如前臺(tái)應(yīng)用程序可能會(huì)調(diào)用數(shù)據(jù)庫的函數(shù)或者過程。此時(shí)在數(shù)據(jù)庫的函數(shù)或者過程中做好能夠說明某個(gè)異常的具體原因。如根據(jù)某個(gè)基礎(chǔ)表生成另一張表的時(shí)候,某個(gè)字段不能夠?yàn)榭盏鹊取⑦@些異常信息說明清楚后,如果真的遇到類似的異常時(shí),操作數(shù)據(jù)庫異常類就會(huì)將數(shù)據(jù)庫的異常信息反會(huì)給前臺(tái)用戶。從而有利于用戶尋找問題的原因,并在最短時(shí)間內(nèi)改正。當(dāng)然,這需要Java程序員與數(shù)據(jù)庫設(shè)計(jì)人員進(jìn)行協(xié)調(diào)。

其次需要注意的是,異常并不是常態(tài)。也就是說,大部分異??梢酝ㄟ^前提的合理預(yù)見與預(yù)防,來消除。如設(shè)計(jì)到四則運(yùn)算,可以在前臺(tái)應(yīng)用程序窗口中限制在除數(shù)字段內(nèi)輸入0值等手段來消除應(yīng)用程序運(yùn)行中可能產(chǎn)生的異常。不過這往往要求應(yīng)用程序開發(fā)人員有比較豐富的工作經(jīng)驗(yàn)以及由比較嚴(yán)密的思維邏輯。雖然這有一定的難度,但是筆者認(rèn)為程序開發(fā)人員還是應(yīng)該往這方面努力,而不要老是讓用戶作為你的試驗(yàn)品,讓用戶來發(fā)現(xiàn)應(yīng)用程序中的設(shè)計(jì)Bug。筆者認(rèn)為,只有一些實(shí)在是程序人員無法控制的因素才允許拋出異常。如果應(yīng)用程序開發(fā)人員能夠意識(shí)到這種錯(cuò)誤、但是仍然沒有引起重視或者采取有效的措施防止出現(xiàn)這種異常,那么筆者是不允許的。

 

【編輯推薦】

  1. Java編程中異常處理的優(yōu)劣之道
  2. Java的異常和斷言學(xué)習(xí)筆記
  3. 全面掌握J(rèn)ava的異常處理機(jī)制
  4. Java中異常機(jī)制的深入研究
  5. Java編程中異常問題處理方式的區(qū)別和分析
責(zé)任編輯:佚名 來源: IT專家網(wǎng)
相關(guān)推薦

2009-09-22 12:39:04

2011-04-14 09:36:57

Java

2017-12-29 08:26:28

存儲(chǔ)引擎MySQL

2009-11-10 13:19:09

動(dòng)態(tài)路由協(xié)議

2021-08-10 10:14:14

存儲(chǔ)接口存儲(chǔ)設(shè)備存儲(chǔ)

2020-03-31 16:13:26

分布式事務(wù)方案TCC

2010-09-25 15:07:08

SQL插入語句

2009-12-21 13:37:43

WCF消息交換

2010-08-24 09:43:33

2009-08-06 15:26:18

C#異常類型

2009-08-18 16:45:50

Tomcat內(nèi)存溢出

2012-05-29 16:30:33

Tomcat內(nèi)存溢出

2020-11-03 19:52:54

Java數(shù)組編程語言

2012-08-15 10:44:07

JavaXML

2012-08-14 13:30:00

XML

2011-09-15 15:08:27

2022-10-25 15:25:22

網(wǎng)關(guān)并行Flowable

2010-02-04 10:33:40

C++異常傳遞

2016-02-22 10:10:03

云應(yīng)用云陷阱云安全

2010-02-25 17:01:48

Linux配置文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)