国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA學習之路 (七)異常

Nekron / 2974人閱讀

摘要:阻止當前方法或作用域的,稱為異常。一非檢查異常和,以及她們的子類。強制要求對這類異常做預備處理使用或者。這樣的異常一般是由程序的運行環境導致的。后跟的是異常對象,或者異常對象的引用。

異常 什么是異常
相異與常態,和正常情況下不一致,有錯誤出現。 阻止當前方法或作用域的,稱為異常。

異常分類

Throwable類是Java異常類型的頂層父類,一個對象只有是 Throwable 類的(直接或者間接)實例,他才是一個異常對象,才能被異常處理機制識別。JDK中內建了一些常用的異常類,我們也可以自定義異常

Throwable又派生出Error類Exception類

Error

錯誤: Error類以及他的子類的實例,代表了JVM本身的錯誤。錯誤不能被程序員通過代碼處理,Error很少出現。因此,程序員應該關注Exception為父類的分支下的各種異常類。

Exception

Exception以及他的子類,代表程序運行的發生的各種不同不期望的事件,可以被java的異常處理機制所捕獲,是異常處理的核心。

總體上我們根據Javac對異常的處理要求,將異常類分為2類。

一、非檢查異常
Error和RuntimeException,以及她們的子類。javac在比那一的時候,不會提示和發現這樣的異常,不要求用程序去處理這些異常,所以,最好的解決辦法就是,我們應該是修正代碼,而不是捕獲異常處理,這樣的異常多半是代碼寫的有誤。

如除0錯誤ArithmeticException,錯誤的強制類型轉換錯誤ClassCastException,數組索引越界ArrayIndexOutOfBoundsException,使用了空對象NullPointerException等等。
二、檢查異常
除了Error 和 RuntimeException的其它異常。javac強制要求對這類異常做預備處理(使用 try..catch..finally或者throws)。

在方法中要么用try-catch語句捕獲它并處理,要么用throws子句聲明拋出它,否則編譯不會通過。這樣的異常一般是由程序的運行環境導致的。程序員就應該為這樣的異常時刻準備著。
異常處理

try-catch

當遇到異常時,就會中斷執行,然后程序的控制權將會移交catch中的異常處理程序

try會拋出很多種類型的異常

針對不同的異常,在不同的catch中處理,但是我們仍然需要注意一下: (先寫子類后寫父類)

try-catch-finally

實例
package tryCatchDemo;

public class Testdemo {
    
    public int test() {
        int initNum = 10;
        int result = 100;
        try {
            while(initNum > -1) {
                initNum --;
                result = result + 100/initNum;
            }
            return result;
        }catch(Exception e) {
            e.printStackTrace(); // 打印出錯誤
            System.out.println("循環異常");
            return -1;
        }
    }
}
package tryCatchDemo;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Testdemo t = new Testdemo();
        int result = t.test();
        System.out.println("拋出異常了,此時返回值為"+ result);
    }

}

修改一下

public int test1() {
        int initNum = 10;
        int result = 100;
        try {
            while(initNum > -1) {
                initNum --;
                result = result + 100/initNum;
            }
            return result;
        }catch(Exception e) {
            e.printStackTrace(); // 打印出錯誤
            System.out.println("循環異常");
            return -1;
        }finally{
            System.out.println("最終執行!!");
            return 999;
        }
    }

再修改一下

public int test2() {
        int initNum = 10;
        int result = 100;
        try {
            while(initNum > -1) {
                initNum --;
                result = result + 100/initNum;
            }
            return result;
        }catch(Exception e) {
            e.printStackTrace(); // 打印出錯誤
            System.out.println("循環異常");
            return result = 1000;
        }finally{
            System.out.println("最終執行!!");
            System.out.println("此時result的值為!!"+result);
        }
    }

異常的拋出

throw 將產生的異常拋出(強調的是動作)

throws 如果一個方法可能會出現異常,但沒有能力處理這種異常,可以在方法聲明處用throws子句來聲明拋出異常。

實例

package throw_demo1;

public class newError {
    // 定義一個方法,拋出 數組越界和算術異常(多個異常 用 "," 隔開)
    public void Test1(int x) throws ArrayIndexOutOfBoundsException,ArithmeticException{

        System.out.println(x);
    
        if(x == 0){
    
            System.out.println("沒有異常");
            return;
        }
    
        //數據越界異常
        else if (x == 1){
    
            int[] a = new int[3];
             a[3] = 5;
        }
    
        //算術異常
        else if (x == 2){
    
            int i = 0;
            int j = 5/0;
        }

    }
}
package throw_demo1;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //創建對象
        newError object = new newError();

        // 調用會拋出異常的方法,用try-catch塊
        try{
            object.Test1(0);
        }catch(Exception e){
            System.out.println(e);
        }
        
        
        // 數組越界異常
        try{
            object.Test1(1);
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("數組越界異常:"+e);
        }
        
        // 算術異常
        try{
            object.Test1(2);
        }catch(ArithmeticException e){
            System.out.println("算術異常:"+e);
        }

        //使用 throw 拋出異常(可以拋出異常對象,也可以拋出異常對象的引用)
        try{
            ArrayIndexOutOfBoundsException  exception = new ArrayIndexOutOfBoundsException();
            // 拋出異常
            throw exception;//new ArrayIndexOutOfBoundsException();

        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("thorw拋出異常:"+e);
        }
    }

}

throw與throws的區別

1.  throw 在方法體內使用,throws 函數名后或者參數列表后方法體前
2.  throw 強調動作,而throws 表示一種傾向、可能但不一定實際發生
3.  throws 后面跟的是異常類,可以一個,可以多個,多個用逗號隔開。throw 后跟的是異常對象,或者異常對象的引用。 
自定義異常
class  自定義異常類 extends 異常類型(Exception){
// 因為父類已經把異常信息的操作都完成了,所在子類只要在構造時,將異常信息傳遞給父類通過super 語句即可。
// 重寫 有參 和 無參  構造方法
}
// 一個DrunkException異常
package throwdemo2;

public class DrunkException extends Exception{
    public DrunkException() {
        super();
    }
    public DrunkException(String msg) {
        super(msg);
    }
}
異常鏈

實例

// DrunkException.java
package throwdemo2;

public class DrunkException extends Exception{
    public DrunkException() {
        super();
    }
    public DrunkException(String msg) {
        super(msg);
    }
}
//test.java

package throwdemo2;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        test ct = new test();
        try {
            ct.test2();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    // 拋出一個異常
    public void test1() throws DrunkException{
        throw new DrunkException("你喝多了");
    }
    
    public void test2() {
        try {
            test1();
        }catch(DrunkException e) {
            // 捕獲到test1的異常后,首先拋出一個運行時異常
            RuntimeException newErr = new RuntimeException("喝酒誤事");
            // 設置該異常的造成原因為test1拋出的異常
            newErr.initCause(e); //=> 這里是異常鏈的關鍵
            // 拋出最后異常
            throw newErr;
            
            /**
             * 同樣異常鏈還可以是
             * RuntimeException newErr = new RuntimeException(e);
             * throw newErr;
             */
            
        }
    }

}

總結
1. 處理運行時異常時,采用邏輯去合理避免,同時配合try catch處理
2. 在多重catch之后,最好加上catch(Exception e)來處理可能會出現的異常
3. 對于不確定的代碼,也可以加上try catch
4. 盡量去處理異常,切記只是簡單的e.printStackTrace()去打印
5. 盡量添加finally語句去釋放占用的資源

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76745.html

相關文章

  • JAVA學習之路) package包管理

    摘要:使用包管理中的類在開發過程中需要提供大量的類,那么這么多類會發生同名的情形呢答案是肯定的。那么如何處理這種重名問題呢管理文件解決同名文件沖突。 使用包(Package)管理Java中的類 在開發過程中需要提供大量的類,那么這么多類會發生同名的情形呢?答案是肯定的。那么如何處理這種重名問題呢? 1、管理Java文件 2、解決同名文件沖突。Java允許在類名前面增加一個前綴來限定這個類,...

    JaysonWang 評論0 收藏0
  • 【全棧之路JAVA基礎課程_AJAX原理剖析(20190617v1.0)

    摘要:借鑒圖片僅用于學習分享,請尊重原創作者,勿用于商用。這其中最關鍵的一步就是從服務器獲得請求數據。基本步驟創建對象也就是創建一個異步調用對象。創建一個新的請求并指定該請求的方法及驗證信息。設置響應請求狀態變化的函數。使用和實現局部刷新。 歡迎進入JAVA基礎課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎知識點進行講解...

    biaoxiaoduan 評論0 收藏0
  • 【全棧之路JAVA基礎課程_AJAX原理剖析(20190617v1.0)

    摘要:借鑒圖片僅用于學習分享,請尊重原創作者,勿用于商用。這其中最關鍵的一步就是從服務器獲得請求數據。基本步驟創建對象也就是創建一個異步調用對象。創建一個新的請求并指定該請求的方法及驗證信息。設置響應請求狀態變化的函數。使用和實現局部刷新。 歡迎進入JAVA基礎課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎知識點進行講解...

    yintaolaowanzi 評論0 收藏0

發表評論

0條評論

Nekron

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<