異常問題
實(shí)際工作中住练,遇到的情況不可能是非常完美的席里。比如:你寫的某個(gè)模塊,用戶輸入不一定符合你的要求庭砍、你的程序要打開某個(gè)文件性置,這個(gè)文件可能不存在或者文件格式不對(duì)拾并,你要讀取數(shù)據(jù)庫的數(shù)據(jù),數(shù)據(jù)可能是空的等。我們的程序再跑著嗅义,內(nèi)存或硬盤可能滿了等等屏歹。
軟件程序在運(yùn)行過程中,非持耄可能遇到剛剛提到的這些異常問題蝙眶,我們叫異常,英文是:Exception继控,意思是例外械馆。這些,例外情況武通,或者叫異常霹崎,怎么讓我們寫的程序做出合理的處理,安全的退出冶忱,而不至于程序崩潰尾菇。
如果我們要拷貝一個(gè)文件,在沒有異常機(jī)制的情況下囚枪,我們需要考慮各種異常情況派诬,偽代碼如下:
【示例1】偽代碼使用if處理程序中可能出現(xiàn)的各種情況
//將d:/a.txt復(fù)制到e:/a.txt
if("d:/a.txt"這個(gè)文件存在){
??? if(e盤的空間大于a.txt文件長度){
?????? if(文件復(fù)制一半IO流斷掉){
???????????停止copy,輸出:IO流出問題链沼!
?????? }else{
???????????copyFile("d:/a.txt","e:/a.txt");
?????? }
??? }else{
???????輸出:e盤空間不夠存放a.txt默赂!
??? }
}else{
????輸出:a.txt不存在!
}
這種方式括勺,有兩個(gè)壞處:
1.??邏輯代碼和錯(cuò)誤處理代碼放一起缆八!
2.??程序員本身需要考慮的例外情況較復(fù)雜,對(duì)程序員本身要求較高疾捍!
那么奈辰,我們?nèi)绾谓鉀Q應(yīng)對(duì)異常情況呢?JAVA的異常機(jī)制給我們提供了方便的處理乱豆。如上情況奖恰,如果是用JAVA的異常機(jī)制來處理,示意代碼如下(僅限示意宛裕,不能運(yùn)行):
try?{
??? copyFile("d:/a.txt","e:/a.txt");
}?catch?? (Exception e) {
??? e.printStackTrace();
}
異常機(jī)制本質(zhì)
就是當(dāng)程序出現(xiàn)錯(cuò)誤瑟啃,程序安全退出的機(jī)制
異常(Exception)的概念
我們開始看我們的第一個(gè)異常對(duì)象,并分析一下異常機(jī)制是如何工作的揩尸。
【示例2】異常的分析
public?class?Test {
????public?static?void?main(String[] args) {
???????int?i=1/0;
?????? System.out.println(i);
??? }
}
示例2?運(yùn)行效果圖?
Java是采用面向?qū)ο蟮姆绞絹硖幚懋惓5挠加臁L幚磉^程:
1.拋出異常:在執(zhí)行一個(gè)方法時(shí),如果發(fā)生異常疲酌,則這個(gè)方法生成代表該異常的一個(gè)對(duì)象蜡峰,停止當(dāng)前執(zhí)行路徑,并把異常對(duì)象提交給JRE朗恳。
2.捕獲異常:JRE得到該異常后湿颅,尋找相應(yīng)的代碼來處理該異常。JRE在方法的調(diào)用棧中查找粥诫,從生成異常的方法開始回溯油航,直到找到相應(yīng)的異常處理代碼為止。
本節(jié)課我們先聊到這兒怀浆,明天我們繼續(xù)聊……
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記谊囚。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn)执赡,曾在神州數(shù)碼镰踏、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師沙合、高級(jí)工程師奠伪、架構(gòu)師。精通Java平臺(tái)軟件開發(fā)首懈,精通JAVAEE绊率,熟悉各種流行開發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動(dòng)前端和Web前端
D-J2EE從了解到實(shí)戰(zhàn)
E-Java高級(jí)框架精解
F-Linux和Hadoop?