異常問題
實際工作中,遇到的情況不可能是非常完美的。比如:你寫的某個模塊,用戶輸入不一定符合你的要求、你的程序要打開某個文件,這個文件可能不存在或者文件格式不對,你要讀取數據庫的數據,數據可能是空的等。我們的程序再跑著,內存或硬盤可能滿了等等。
軟件程序在運行過程中,非常可能遇到剛剛提到的這些異常問題,我們叫異常,英文是:Exception,意思是例外。這些,例外情況,或者叫異常,怎么讓我們寫的程序做出合理的處理,安全的退出,而不至于程序崩潰。
如果我們要拷貝一個文件,在沒有異常機制的情況下,我們需要考慮各種異常情況,偽代碼如下:
【示例1】偽代碼使用if處理程序中可能出現的各種情況
//將d:/a.txt復制到e:/a.txt
if("d:/a.txt"這個文件存在){
??? if(e盤的空間大于a.txt文件長度){
?????? if(文件復制一半IO流斷掉){
???????????停止copy,輸出:IO流出問題!
?????? }else{
???????????copyFile("d:/a.txt","e:/a.txt");
?????? }
??? }else{
???????輸出:e盤空間不夠存放a.txt!
??? }
}else{
????輸出:a.txt不存在!
}
這種方式,有兩個壞處:
1.??邏輯代碼和錯誤處理代碼放一起!
2.??程序員本身需要考慮的例外情況較復雜,對程序員本身要求較高!
那么,我們如何解決應對異常情況呢?JAVA的異常機制給我們提供了方便的處理。如上情況,如果是用JAVA的異常機制來處理,示意代碼如下(僅限示意,不能運行):
try?{
??? copyFile("d:/a.txt","e:/a.txt");
}?catch?? (Exception e) {
??? e.printStackTrace();
}
異常機制本質
就是當程序出現錯誤,程序安全退出的機制
異常(Exception)的概念
我們開始看我們的第一個異常對象,并分析一下異常機制是如何工作的。
【示例2】異常的分析
public?class?Test {
????public?static?void?main(String[] args) {
???????int?i=1/0;
?????? System.out.println(i);
??? }
}
示例2?運行效果圖?
Java是采用面向對象的方式來處理異常的。處理過程:
1.拋出異常:在執行一個方法時,如果發生異常,則這個方法生成代表該異常的一個對象,停止當前執行路徑,并把異常對象提交給JRE。
2.捕獲異常:JRE得到該異常后,尋找相應的代碼來處理該異常。JRE在方法的調用棧中查找,從生成異常的方法開始回溯,直到找到相應的異常處理代碼為止。
本節課我們先聊到這兒,明天我們繼續聊……
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop?