亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

1、異常概述和繼承體系 2、原因及處理方式 3、運行時異常 4、重寫異常處理 5、Throwable

GT / 3094人閱讀

摘要:案例演示該句運行時發(fā)生了數(shù)組索引越界異常,由于沒有處理異常,導(dǎo)致程序無法繼續(xù)執(zhí)行,程序結(jié)束。用來進行某種異常的捕獲,實現(xiàn)對捕獲到的異常進行處理。運行時期異常一旦發(fā)生需要程序人員修改源代碼。

01異常的概述
* A: 異常的概述
    * a:什么是異常
        * Java代碼在運行時期發(fā)生的問題就是異常。
    * b:異常類
        * 在Java中,把異常信息封裝成了一個類。
        * 當(dāng)出現(xiàn)了問題時,就會創(chuàng)建異常類對象并拋出異常相關(guān)的信息(如異常出現(xiàn)的位置、原因等)。
    * c:我們見過的異常:數(shù)組角標(biāo)越界異常ArrayIndexOutOfBoundsException,空指針異常NullPointerException
    
02異常的繼續(xù)體系和錯誤的區(qū)別
* A: 異常的繼承體系
    Throwable: 它是所有錯誤與異常的超類(祖宗類)
        |- Error 錯誤
        |- Exception 編譯期異常,進行編譯JAVA程序時出現(xiàn)的問題
            |- RuntimeException 運行期異常, JAVA程序運行過程中出現(xiàn)的問題
* B:異常與錯誤的區(qū)別
    * a:異常
        * 指程序在編譯、運行期間發(fā)生了某種異常(XxxException),我們可以對異常進行具體的處理。
        * 若不處理異常,程序?qū)Y(jié)束運行。
        * 案例演示:
            public static void main(String[] args) {
                int[] arr = new int[3];
                System.out.println(arr[0]);
                System.out.println(arr[3]);
                // 該句運行時發(fā)生了數(shù)組索引越界異常ArrayIndexOutOfBoundsException,
                // 由于沒有處理異常,導(dǎo)致程序無法繼續(xù)執(zhí)行,程序結(jié)束。
                System.out.println("over"); // 由于上面代碼發(fā)生了異常,此句代碼不會執(zhí)行
            }
            
    * b:錯誤
        * 指程序在運行期間發(fā)生了某種錯誤(XxxError),Error錯誤通常沒有具體的處理方式,程序?qū)Y(jié)束運行。
        * Error錯誤的發(fā)生往往都是系統(tǒng)級別的問題,都是jvm所在系統(tǒng)發(fā)生的,并反饋給jvm的。
        * 我們無法針對處理,只能修正代碼。
        * 案例演示:
            public static void main(String[] args) {
                int[] arr = new int[1024*1024*100];
                //該句運行時發(fā)生了內(nèi)存溢出錯誤OutOfMemoryError,開辟了過大的數(shù)組空間,
                //導(dǎo)致JVM在分配數(shù)組空間時超出了JVM內(nèi)存空間,直接發(fā)生錯誤。
            }
        
03異常對象的產(chǎn)生原因和處理方式
* A: 異常對象的產(chǎn)生原因
    * 案例代碼:
    ?    * 工具類
        class ArrayTools{
            //對給定的數(shù)組通過給定的角標(biāo)獲取元素。
            public static int getElement(int[] arr,int index)    {
                int element = arr[index];
                return element;
            }
        }
        * 測試類
        class ExceptionDemo2 {
            public static void main(String[] args)     {
                int[] arr = {34,12,67};
                int num = ArrayTools.getElement(arr,4)
                System.out.println("num="+num);
                System.out.println("over");
            }
        }
    * 原因分析:
        * a: 由于沒找到4索引,導(dǎo)致運行時發(fā)生了異常。這個異常JVM認(rèn)識:ArrayIndexOutOfBoundsException。
            這個異常Java本身有描述:異常的名稱、異常的內(nèi)容、異常的產(chǎn)生位置。
            java將這些信息直接封裝到異常對象中。new ArrayIndexOutOfBoundsException(4);
        * b:throw new ArrayIndexOutOfBoundsException(4);產(chǎn)生異常對象。JVM將產(chǎn)生的異常拋給調(diào)用者main()方法。
        * c:main()方法接收到了數(shù)組索引越界異常對象。
            由于main()方法并沒有進行處理異常,main()方法就會繼續(xù)把異常拋給調(diào)用者JVM。
            當(dāng)JVM收到異常后,將異常對象中的名稱、異常內(nèi)容、位置都顯示在就控制臺上。同時讓程序立刻終止。
* B:異常的處理方式
    * a:JVM的默認(rèn)處理方式
        * 把異常的名稱,原因,位置等信息輸出在控制臺,同時會結(jié)束程序。
        * 一旦有異常發(fā)生,其后來的代碼不能繼續(xù)執(zhí)行。
    * b:解決程序中異常的手動方式
        * a):編寫處理代碼 try...catch...finally
        * b):拋出 throws
04方法內(nèi)部拋出對象throw關(guān)鍵字
在java中,提供了一個throw關(guān)鍵字,它用來拋出一個指定的異常對象。
* A: 什么時候使用throw關(guān)鍵字?
    * 當(dāng)調(diào)用方法使用接受到的參數(shù)時,首先需要先對參數(shù)數(shù)據(jù)進行合法的判斷,
      數(shù)據(jù)若不合法,就應(yīng)該告訴調(diào)用者,傳遞合法的數(shù)據(jù)進來。
      這時需要使用拋出異常的方式來告訴調(diào)用者。
* B: 使用throw關(guān)鍵字具體操作
    * a: 創(chuàng)建一個異常對象。封裝一些提示信息(信息可以自己編寫)。
    * b: 通過關(guān)鍵字throw將這個異常對象告知給調(diào)用者。throw 異常對象;
    throw 用在方法內(nèi),用來拋出一個異常對象,將這個異常對象傳遞到調(diào)用者處,并結(jié)束當(dāng)前方法的執(zhí)行。
* C: throw關(guān)鍵字使用格式
    * throw new 異常類名(參數(shù));
    * 例如:
        throw new NullPointerException("要訪問的arr數(shù)組不存在");
        throw new ArrayIndexOutOfBoundsException("該索引在數(shù)組中不存在,已超出范圍");
* D:案例演示
    * throw的使用
05方法聲明異常關(guān)鍵字throws
* A: 聲明
    * 將問題標(biāo)識出來,報告給調(diào)用者。如果方法內(nèi)通過throw拋出了編譯時異常,而沒有捕獲處理(稍后講解該方式),那么必須通過throws進行聲明,讓調(diào)用者去處理。
* B: 聲明異常格式
    * 修飾符 返回值類型 方法名(參數(shù)) throws 異常類名1,異常類名2… {   }
* C:注意事項:
    * throws用于進行異常類的聲明,若該方法可能有多種異常情況產(chǎn)生,那么在throws后面可以寫多個異常類,用逗號隔開。
* D:代碼演示:
    * 多個異常的處理
    
    
    

==============================第二節(jié)課開始====================================

06try...catch異常處理
* A: 捕獲
    * Java中對異常有針對性的語句進行捕獲,可以對出現(xiàn)的異常進行指定方式的處理
* B: 捕獲異常格式
    try {
        //需要被檢測的語句。
    }
    catch(異常類 變量) { //參數(shù)。
        //異常的處理語句。
    }
    finally {
        //一定會被執(zhí)行的語句。
    }
* C: 格式說明
    * a: try
        * 該代碼塊中編寫可能產(chǎn)生異常的代碼。
    * b: catch
        * 用來進行某種異常的捕獲,實現(xiàn)對捕獲到的異常進行處理。
    * c: finally:
        * 有一些特定的代碼無論異常是否發(fā)生,都需要執(zhí)行。
        * 另外,因為異常會引發(fā)程序跳轉(zhuǎn),導(dǎo)致有些語句執(zhí)行不到。
        * 而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執(zhí)行的。
    * d:try...catch...處理掉異常后,程序可以繼續(xù)執(zhí)行
* D:案例演示
    * 捕獲異常格式
07多catch處理
* A:一個try 多個catch組合 
    * 對代碼進行異常檢測,并對檢測的異常傳遞給catch處理。對每種異常信息進行不同的捕獲處理。
* B:多catch處理的格式
    void show(){ //不用throws 
        try{
            throw new Exception();//產(chǎn)生異常,直接捕獲處理
        }catch(XxxException e){
            //處理方式    
        }catch(YyyException e){
            //處理方式    
        }catch(ZzzException e){
            //處理方式    
        }
    }
    注意事項:在捕獲異常處理中,變量也是有作用域的,如可以定義多個catch中異常變量名為e。
08多catch處理細(xì)節(jié)
* A:細(xì)節(jié):多個catch小括號中,寫的是異常類的類名,有沒有順序的概念?
    * 有順序關(guān)系。
* B:平級異常:
    * 拋出的異常類之間,沒有繼承關(guān)系,沒有順序
        NullPointerException extends RuntimeException
        NoSuchElementException extends RuntimeException
        ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException extends RuntimeException
* C:上下級關(guān)系的異常
    * 越高級的父類,越寫在下面
        NullPointerException extends RuntimeException extends Exception
09finally代碼塊
* A: finally的特點
    * 被finally控制的語句體一定會執(zhí)行
* B:finally的作用
    * finally,無論程序是否有異常出現(xiàn),程序必須執(zhí)行釋放資源在
      如:IO流操作和數(shù)據(jù)庫操作中會見到
    
10調(diào)用拋出異常方法try和throws處理方式
* A: 在實際開發(fā)中使用哪種異常處理方式呢?
    * 能自己處理的盡量自己處理。(建議用try...catch)
    
    

==============================第三節(jié)課開始====================================

11運行時期異常的特點
* A: 運行時期異常的概述: 
    * RuntimeException和他的所有子類異常,都屬于運行時期異常。
        NullPointerException,ArrayIndexOutOfBoundsException等都屬于運行時期異常.
* B:運行時期異常的特點
    * a:方法中拋出運行時期異常,方法定義中無需throws聲明,調(diào)用者也無需處理此異常。
    * b:運行時期異常一旦發(fā)生,需要程序人員修改源代碼。
    設(shè)計原因:
        運行異常,不能發(fā)生,但是如果發(fā)生了,程序人員停止程序修改源代碼
        運行異常: 一旦發(fā)生,不要處理,請你修改源代碼,運行異常一旦發(fā)生,后面的代碼沒有執(zhí)行的意義
12運行異常的案例
* A: 計算圓的面積案例
    定義方法,計算圓形的面積
    傳遞參數(shù)0,或者負(fù)數(shù),計算的時候沒有問題
    但是,違反了真實情況
    參數(shù)小于=0, 停止程序,不要在計算了
* B:數(shù)組索引越界案例
    使用數(shù)組中不存在的索引
    public class RuntimeExceptionDemo {
        public static void main(String[] args) {
                double d = getArea(1);
                System.out.println(d);
        }
        
        /*
         *  定義方法,計算圓形的面積
         *  傳遞參數(shù)0,或者負(fù)數(shù),計算的時候沒有問題
         *  但是,違反了真實情況
         *  參數(shù)小于=0, 停止程序,不要在計算了
         */
        public static double getArea(double r){
            if(r <= 0)
                throw new RuntimeException("圓形不存在");
            return r*r*Math.PI;
        }
        
        public static void function(){
            int[] arr = {1,2,3};
            //對數(shù)組的5索引進行判斷,如果5索引大于100,請將5索引上的數(shù)據(jù)/2,否則除以3
            //索引根本就沒有
            if(arr[5] > 100){
                arr[5] = arr[5]/2;
            }else{
                arr[5] = arr[5]/3;
            }
    }
13方法重寫時候異常的處理
* A:方法重寫時候異常的處理
    * a:子類覆蓋父類方法時,如果父類的方法聲明異常,子類只能聲明父類異?;蛘咴摦惓5淖宇?,或者不聲明。
        例如:
        class Fu {
            public void method () throws RuntimeException {
            }
        }
        class Zi extends Fu {
            public void method() throws RuntimeException { }  //拋出父類一樣的異常
            //public void method() throws NullPointerException{ } //拋出父類子異常
        }
    * b:當(dāng)父類方法聲明多個異常時,子類覆蓋時只能聲明多個異常的子集。
        例如:
        class Fu {
            public void method () throws NullPointerException, ClassCastException{
            }
        }
        class Zi extends Fu {
            public void method()throws NullPointerException, ClassCastException { }          
            public void method() throws NullPointerException{ } //拋出父類異常中的一部分
            public void method() throws ClassCastException { } //拋出父類異常中的一部分
        }
    * c:當(dāng)被覆蓋的方法沒有異常聲明時,子類覆蓋時無法聲明異常的。
        例如:
        class Fu {
            public void method (){
            }
        }
        class Zi extends Fu {
            public void method() throws Exception { }//錯誤的方式
        }
* B:問題:父類中會存在下列這種情況,接口也有這種情況。
            接口中沒有聲明異常,而實現(xiàn)的子類覆蓋方法時發(fā)生了異常,怎么辦?
     回答:無法進行throws聲明,只能catch的捕獲。
            萬一問題處理不了呢?catch中繼續(xù)throw拋出,但是只能將異常轉(zhuǎn)換成RuntimeException子類拋出。
            
14Throwable類方法
* A: 常見方法
    * a:getMessage()方法
        返回該異常的詳細(xì)信息字符串,即異常提示信息
    * b:toString()方法
        返回該異常的名稱與詳細(xì)信息字符串
    * c:printStackTrace()方法
        在控制臺輸出該異常的名稱與詳細(xì)信息字符串、異常出現(xiàn)的代碼位置
* B:案例演示
    異常的常用方法代碼演示
        try {
            Person p= null;
            if (p==null) {
                throw new NullPointerException(“出現(xiàn)空指針異常了,請檢查對象是否為null”);
            }
        } catch (NullPointerException e) {
            String message = e.getMesage();
            System.out.println(message ); 
            
            String result = e.toString();
            System.out.println(result);    
            
            e.printStackTrace(); 
        }
        
        
        

======================第四節(jié)課開始=========

15自定義異常
* A: 自定義異常的定義
    * a:通過閱讀源碼,發(fā)現(xiàn)規(guī)律:
        每個異常中都調(diào)用了父類的構(gòu)造方法,把異常描述信息傳遞給了父類,讓父類幫我們進行異常信息的封裝。
    * b:格式:
        Class 異常名 extends Exception{ //或繼承RuntimeException
            public 異常名(){
            }
            public 異常名(String s){ 
                super(s); 
            }
        }    
    
    * c:自定義異常繼承Exception演示
    * d:自定義異常繼承RuntimeException演示
* B:自定義異常的練習(xí)
    在Person類的有參數(shù)構(gòu)造方法中,進行年齡范圍的判斷,
    若年齡為負(fù)數(shù)或大于200歲,則拋出NoAgeException異常,異常提示信息“年齡數(shù)值非法”。
    要求:在測試類中,調(diào)用有參數(shù)構(gòu)造方法,完成Person對象創(chuàng)建,并進行異常的處理。

* C:關(guān)于構(gòu)造方法拋出異??偨Y(jié)
    構(gòu)造函數(shù)到底拋出這個NoAgeException是繼承Exception呢?還是繼承RuntimeException呢?
    * a:繼承Exception,必須要throws聲明,一聲明就告知調(diào)用者進行捕獲,一旦問題處理了調(diào)用者的程序會繼續(xù)執(zhí)行。
    * b:繼承RuntimeExcpetion,不需要throws聲明的,這時調(diào)用是不需要編寫捕獲代碼的,因為調(diào)用根本就不知道有問題。
        一旦發(fā)生NoAgeException,調(diào)用者程序會停掉,并有jvm將信息顯示到屏幕,讓調(diào)用者看到問題,修正代碼。
    
    
16總結(jié)

把今天的知識點總結(jié)一遍。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/67163.html

相關(guān)文章

  • 異常機制詳解

    摘要:當(dāng)運行時系統(tǒng)遍歷調(diào)用棧而未找到合適的異常處理器,則運行時系統(tǒng)終止。不可查異常編譯器不要求強制處置的異常包括運行時異常與其子類和錯誤。 目錄介紹 1.什么是異常 2.異常 2.1 異常的概述和分類【了解】 2.2 JVM默認(rèn)是如何處理異常的【理解】 2.3 異常處理的兩種方式【理解】 2.4 try...catch的方式處理異?!菊莆铡?2.5 編譯期異常和運行期異常的區(qū)別【理解】...

    wanghui 評論0 收藏0
  • 異常與多線程概述

    摘要:表示異常,異常產(chǎn)生后程序員可以通過代碼的方式糾正,使程序繼續(xù)運行,是必須要處理的。獲取發(fā)生異常的原因。需要將這個異常對象告知給調(diào)用者。另外,因為異常會引發(fā)程序跳轉(zhuǎn),導(dǎo)致有些語句執(zhí)行不到。多個異常一次捕獲,多次處理。 day05 【異常、線程】 主要內(nèi)容 異常、線程 教學(xué)目標(biāo) [ ] 能夠辨別程序中異常和錯誤的區(qū)別 [ ] 說出異常的分類 [ ] 說出虛擬機處理異常的方式 [ ] 列舉...

    sean 評論0 收藏0
  • Java 異常實戰(zhàn)

    摘要:不過按照經(jīng)驗來說,這類異常要么盡量避免,要么出現(xiàn)了就要做異常處理,從而保證程序的健壯性。業(yè)務(wù)是千變?nèi)f化,但是它們可能產(chǎn)生的異常處理方式是不會變化的,按照這個思路去做異常處理即可。 前言:說到異常體系,可能對于一些初入職場的老鐵會很頭痛,不能夠很清晰的描述異常是個什么情況。那么本文將通過打流水仗的方式給大家介紹一下工作中涉及的異常知識。首先能看到本文,說明也對異常是有了解的,所以文章開頭...

    libxd 評論0 收藏0
  • Java編程基礎(chǔ)20——異常&IO(File類)

    摘要:異常異常的概述和分類異常的概述異常就是程序在運行過程中出現(xiàn)的錯誤。運行時異常就是程序員所犯的錯誤,需要回來修改代碼。獲取異常類名和異常信息,返回字符串。如果路徑名不同,就是改名并剪切。刪除注意事項中的刪除不走回收站。 1_異常(異常的概述和分類) A:異常的概述 異常就是Java程序在運行過程中出現(xiàn)的錯誤。 B:異常的分類 通過API查看Throwable Error 服務(wù)...

    church 評論0 收藏0
  • 聊聊Java的泛型實現(xiàn)

    摘要:靜態(tài)變量是被泛型類的所有實例所共享的。所以引用能完成泛型類型的檢查。對于這個類型系統(tǒng),有如下的一些規(guī)則相同類型參數(shù)的泛型類的關(guān)系取決于泛型類自身的繼承體系結(jié)構(gòu)。事實上,泛型類擴展都不合法。 前言 和C++以模板來實現(xiàn)靜多態(tài)不同,Java基于運行時支持選擇了泛型,兩者的實現(xiàn)原理大相庭徑。C++可以支持基本類型作為模板參數(shù),Java卻只能接受類作為泛型參數(shù);Java可以在泛型類的方法中取得...

    lewif 評論0 收藏0

發(fā)表評論

0條評論

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