目錄
收到圖摘自:" >收到圖摘自:
       " >      
首頁 Java java教程 java提高篇(十六)-----異常(一)

java提高篇(十六)-----異常(一)

Feb 10, 2017 am 11:41 AM
java 例外

Java的基本理念是「結構不佳的程式碼不能運作」! ! ! ! !

       大成若缺,其用上不弊。

       大盈若衝,其用不窮。

       在這個世界上不可能存在完美的東西,不管完美的思維有多麼縹密,細心,我們都不可能考慮所有的因素,這就是所謂的智者千慮必失。同樣的道理,電腦的世界也是不完美的,異常情況隨時都會發生,我們所需要做的就是避免那些能夠避免的異常,處理那些不能避免的異常。這裡我將記錄如何利用異常還程式一個「完美世界」。

       一、為什麼要使用異常

首先我們可以明確一點就是異常的處理機制可以確保我們程式的健壯性,提高系統可用性。雖然我們不是特別喜歡看到它,但是我們不能不承認它的地位,作用。有異常表示程序有問題,有助於我們及時改正。在我們的程式設計當做,任何時候任何地方因為任何原因都有可能會出現異常,在沒有異常機制的時候我們是這樣處理的透過函數的回傳值來判斷是否發生了異常(這個回傳值通常是已經約定好了的),呼叫該函數的程式負責檢查並且分析回傳值。雖然可以解決異常問題,但是這樣做有幾個缺陷:

       1、容易混淆。如果約定回傳值為-11111時表示出現異常,那麼當程式最後的計算結果真的為-1111呢?

       2、 程式碼可讀性差。將異常處理程式碼和程式碼混淆在一起將會降低程式碼的可讀性。

       3、 由呼叫函數來分析異常,這要求程式設計師對函式庫函數有很深的了解。

       在OO中提供的異常處理機制是提供程式碼健壯的強而有力的方式。 使用異常機制它能夠降低錯誤處理程式碼的複雜度,如果不使用異常,那麼就必須檢查特定的錯誤,並在程式中的許多地方去處理它,而如果使用異常,那就不必在方法呼叫處進行檢查,因為異常機制將保證能夠捕獲這個錯誤,並且,只需在一個地方處理錯誤,即所謂的異常處理程序中。這種方式不僅節約程式碼,而且把「概述在正常執行過程中做什麼事」的程式碼和「出了問題怎麼辦」的程式碼分開。總之,與先前的錯誤處理方法相比,異常機制使程式碼的閱讀、編寫和調試工作更加井井有條。 (摘自《Think in java 》)。

       在初學時,總是聽老師說把有可能出錯的地方記得加異常處理,剛開始還不明白,有時候還覺得只是多此一舉,現在隨著自己的不斷深入,代碼編寫多了,漸漸明白了異常是非常重要的。

       二、基本定義

       在《Think in java》中是指這樣定義異常的作用方法這裡一定要明確一點:異常代碼某種程度的錯誤,儘管Java有異常處理機制,但是我們不能以「正常」的眼光來看待異常,異常處理機制的原因就是告訴你:這裡可能會或已經產生了錯誤,您的程式出現了不正常的情況,可能會導致程式失敗!

       那麼何時才會出現異常呢?只有在你目前的環境下程式無法正常運作下去,也就是說程式已經無法來正確解決問題了,這時它所就會從當前環境中跳出,並且拋出異常。拋出異常後,它首先會做幾件事。首先,它會使用new創建一個異常對象,然後在產生異常的位置終止程序,並且從當前環境中彈出對異常對象的引用,這時。異常處理機制就會接管程序,並開始尋找一個恰當的地方來繼續執行程序,這個恰當的地方就是異常處理程序,它的任務就是將程序從錯誤狀態恢復,以使程序要么換一種方法執行,要么繼續執行下去。

       總的來說異常處理機制是當程序發生異常時,它強制終止程序運行,記錄異常信息並將這些信息反饋給我們,由我們來確定是否處理異常。

收到圖摘自:

http://www.php.cn/

)。


      

從上面這張圖片中可以看出,Throwable是java中所有錯誤的超類語言(Throwable)即可。它有兩個子類別:Error、Exception。

       其中Error為錯誤,是程序無法處理的,如OutOfMemoryError、ThreadDeath等,出現這種情況你唯一能做的就是聽之任之,交由JVM來處理,JVMDeath等,出現你唯一能做的就是聽之任之,交由JVM來處理,JVMDeath終止線程。

       而Exception是程序可以處理的異常。它又分為兩種CheckedException(受撿異常),一種是UncheckedException(不受檢查異常)。其中CheckException發生在編譯階段,必須使用try…catch(或throws)否則編譯不通過。而UncheckedException發生在運行期,具有不確定性,主要是由於程式的邏輯問題所引起的,難以排查,我們一般都需要縱觀全局才能夠發現這類的異常錯誤,所以在程式設計中我們需要認真考慮,好好寫程式碼,盡量處理異常,即使產生了異常,也能盡量保證程式朝著有利方向發展。

       所以:對於可恢復的條件使用被檢查的異常(CheckedException),對於程序錯誤(言外之意不可恢復,大錯異常已經釀成)使用運行時(RuntimeException)。

      

java的異常類實在是太多了,產生的原因也千變萬化,所以在部落格文章中經常整理!        四、異常使用      

      

     無論你發神馬脾氣,我都默默承受,靜靜處理。對初學者來說異常就是try…catch,(鄙剛接觸時也是這麼認為的,碰到異常就是try…catch)。個人感覺try…catch確實是用的最多也是最實用的。

      

在異常中try快包含可能出現異常的程式碼區塊,catch區塊捕捉異常後對異常進行處理。先看以下實例:

public class ExceptionTest {
    public static void main(String[] args) {
        String file = "D:\\exceptionTest.txt";
        FileReader reader;
        try {
            reader = new FileReader(file);
            Scanner in = new Scanner(reader);  
            String string = in.next();  
            System.out.println(string + "不知道我有幸能够执行到不.....");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("对不起,你执行不到...");
        }  
        finally{
            System.out.println("finally 在执行...");
        }
    }
}
登入後複製

这是段非常简单的程序,用于读取D盘目录下的exceptionText.txt文件,同时读取其中的内容、输出。首先D盘没有该文件,运行程序结果如下:

java.io.FileNotFoundException: D:\exceptionTest.txt (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at java.io.FileReader.<init>(FileReader.java:41)
    at com.test9.ExceptionTest.main(ExceptionTest.java:19)
对不起,你执行不到...
finally 在执行...
登入後複製

从这个结果我们可以看出这些:

1、当程序遇到异常时会终止程序的运行(即后面的代码不在执行),控制权交由异常处理机制处理。

2、catch捕捉异常后,执行里面的函数。

当我们在D盘目录下新建一个exceptionTest.txt文件后,运行程序结果如下:

1111不知道我有幸能够执行到不.....
finally 在执行...
登入後複製

11111是该文件中的内容。从这个运行结果可以得出这个结果:不论程序是否发生异常,finally代码块总是会执行。所以finally一般用来关闭资源。

在这里我们在看如下程序:

public class ExceptionTest {
    public static void main(String[] args) {
        int[] a = {1,2,3,4};
        System.out.println(a[4]);
        System.out.println("我执行了吗???");
    }
}
登入後複製

程序运行结果:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at com.test9.ExceptionTest.main(ExceptionTest.java:14)
登入後複製

各位请注意这个异常信息和上面的异常信息错误,为了看得更加清楚,我将他们列在一起:

java.io.FileNotFoundException: D:\exceptionTest.txt (系统找不到指定的文件。)
        Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
登入後複製

       在这里我们发现两个异常之间存在如下区别:第二个异常信息多了Exception in thread"main",这显示了出现异常信息的位置。在这里可以得到如下结论:若程序中显示的声明了某个异常,则抛出异常时不会显示出处,若程序中没有显示的声明某个异常,当抛出异常时,系统会显示异常的出处。

以上就是java提高篇(十六)-----异常(一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles