java(異常體系及許可權修飾符)

來源:互聯網
上載者:User

標籤:自訂異常類   核心   路徑   必須   pack   命名   def   指定   雙擊   

java異常體系異常的體系:
異常體系:--------| Throwable  所有錯誤或者異常的父類--------------| Error(錯誤)--------------| Exception(異常) 異常一般都通過代碼處理 --------------------| 運行時異常: 如果一個方法內部拋出了一個運行時異常,那麼方法上 可以聲明也可以不 聲明,調用者可以以處理也可以不處理。--------------------| 編譯時間異常(非運行時異常、受檢異常): 如果一個方法內部拋出了一個編譯時間異常對象,那麼方法上就必須要聲明,而且調用者也必須要處理。運行時異常:RuntimeException以及RuntimeException子類 都是屬於運行時異常。編譯時間異常:除了運行時異常就是編譯異常。

如何區分錯誤與異常呢:

1.如果程式出現了不正常的資訊,如果不正常的資訊的類名是以Error結尾的,那麼肯定是一個錯誤。
2.如果是以Exception結尾的,那麼肯定就是一個異常。

class Demo10 {    public static void main(String[] args) {        int[] arr = null;        div(4,0,arr);    }    public static void div(int a , int b,int[] arr) {        int c;        c = a/b;  //jvm在這句話的時候發現了不正常的情況,那麼就會建立一個對應的異常對象。        System.out.println("數組的長度:"+ arr.length);    }}

jvm運行到a/b這個語句的時候,發現b為0,除數為0在我們現實生活中是屬於不正常的情況,jvm一旦發現了這種不正常的情況時候,那麼jvm就會馬上建立一個對應的異常對象,並且會調用這個異常對象的printStackTrace的方法來處理。

異常的處理:

方式一:捕獲處理方式二:拋出處理
捕獲處理

捕獲處理的格式:

try{    可能發生異常的代碼;}catch(捕獲的異常類型 變數名){    處理異常的代碼....}

捕獲處理要注意的細節:

1.如果try塊中代碼出了異常經過了處理之後,那麼try-catch塊外面的代碼可以正常執行。
2.如果try塊中出了異常的代碼,那麼在try塊中出現異常代碼後面的代碼是不會執行了。
3.一個try塊後面是可以跟有多個catch塊的,也就是一個try塊可以捕獲多種異常的類型。
4.一個try塊可以捕獲多種異常的類型,但是捕獲的異常類型必須從小到大進行捕獲,否則編譯報錯。

class Demo10 {    public static void main(String[] args) {        int[] arr = null;        div(4,0,arr);    }    public static void div(int a , int b,int[] arr) {        int c = 0;        try{            c = a/b;  //jvm在這句話的時候發現了不正常的情況,那麼就會建立一個對應的異常對象。            System.out.println("數組的長度:"+ arr.length);        }catch(ArithmeticException e){            //處理異常的代碼....            System.out.println("異常處理了....");            System.out.println("toString:"+ e.toString());        }catch(NullPointerException e){            System.out.println("出現了null 指標異常....");        }catch(Exception e){              System.out.println("我是急診室,包治百病!");        }            System.out.println("c="+c);    }}

捕獲處理的時候是否就是捕獲Exception即可?

錯的,因為我們在現實開發中遇到不同的異常類型的時候,我往往會有不同的處理方式。所以要分開不同的異常類型處理。
拋出處理(throw throws)

拋出處理要注意的細節:

1.如果一個方法的內部拋出了一個異常對象,那麼必須要在方法上聲明拋出。
2.如果調用了一個聲明拋出異常的方法,那麼調用者必須要處理異常。
3.如果一個方法內部拋出了一個異常對象,那麼throw語句後面的代碼都不會再執行了(一個方法遇到了throw關鍵字,該方法也會馬上停止執行的)。
4.在一種情況下,只能拋出一種類型異常對象。

throw與throws兩個關鍵字:

1.throw關鍵字是用於方法內部的,throws是用於方法聲聲明上的。
2.throw關鍵字是用於方法內部拋出一個異常對象的,throws關鍵字是用於在方法聲明上聲明拋出異常類型的。
3.throw關鍵字後面只能有一個異常對象,throws後面一次可以聲明拋出多種類型的異常。

疑問:何時使用拋出處理?何時捕獲處理?原則是如何?

如果你需要通知到調用者,你代碼出了問題,那麼這時候就使用拋出處理.如果代碼是直接與使用者打交道遇到了異常千萬不要再拋,再拋的話,就給了使用者了。這時候就應該使用捕獲處理。
class Demo11 {    public static void main(String[] args) {        try{            int[] arr = null;            div(4,0,arr); //調用了一個聲明拋出異常類型的方法        }catch(Exception e){            System.out.println("出現異常了...");            e.printStackTrace();        }        }    public static void div(int a, int b,int[] arr) throws Exception,NullPointerException {        if(b==0){            throw new Exception(); //拋出一個異常對象...        }else if(arr==null){            throw new  NullPointerException();        }        int c = a/b;        System.out.println("c="+c);    }}
finally塊;

finally塊的使用前提是必須要存在try塊才能使用。

finally塊的代碼在任何情況下都會執行的,除了jvm退出的情況。

finally非常適合做資源釋放的工作,這樣子可以保證資源檔在任何情況下都會被釋放。

try塊的三種組合方式:

第一種:比較適用於有異常要處理,但是沒有資源要釋放的。

try{    可能發生異常的代碼}catch(捕獲的異常類型 變數名){    處理異常的代碼}

第二種:比較適用於既有異常要處理又要釋放資源的代碼。

try{    可能發生異常的代碼}catch(捕獲的異常類型 變數名){    處理異常的代碼}finally{    釋放資源的代碼;}

第三種:比較適用於內部拋出的是運行時異常,並且有資源要被釋放。

try{    可能發生異常的代碼}finally{    釋放資源的代碼;}
class Demo5 {    public static void main(String[] args) {        //System.out.println("Hello World!");        div(4,0);    }    public static void div(int a, int b) {        try{            if(b==0){                System.exit(0);//退出jvm            }            int c = a/b;            System.out.println("c="+ c);        }catch(Exception e){            System.out.println("出了除數為0的異常...");            throw e;        }finally{            System.out.println("finall塊的代碼執行了..");        }    }}
自訂異常類

sun提供了很多的異常類給我們用於描述程式中各種的不正常情況,但是sun給我提供異常類還不足以描述我們現實生活中所有不正常情況,那麼這時候我們就需要自訂異常類。

自訂異常類的步驟:自訂一個類繼承Exception即可。

class NoIpException extends Exception{    public NoIpException(String message){        super(message);  //調用了Exception一個參數的建構函式。    }}class Demo2 {    public static void main(String[] args) {        String ip = "192.168.10.100";        ip = null;        try{            feiQ(ip);  // 如果調用了一個聲明拋出異常類型的方法,那麼調用者必須要處理。        }catch(NoIpException e){            e.printStackTrace();            System.out.println("馬上插上網線!");        }    }    public static void feiQ(String ip) throws NoIpException{        if(ip==null){            throw new  NoIpException("沒有插網線啊,小白!");        }        System.out.println("正常顯示好友名單..");    }}
java包,許可權修飾符java包

包的作用:

1.解決類名重複產生衝突的問題。
2.便於軟體版本的發布。

定義包的格式:

package 包名;

包名命名規範:包名全部小寫。

包語句要注意的事項:

1.package語句必須位於java檔案中中第一個語句。
2.如果一個類加上了包語句,那麼該類的完整類名就是:包名.類名
3.一個java檔案只能有一個包語句。

有了包之後類與類之間的訪問:

解決方案:sum提供導包語句讓我們解決該問題。

導包語句作用:簡化書寫。(誤區:把一個類匯入到記憶體中)
導包語句的格式:

import 包名.類名; (匯入xxx包中某個類)

導包語句要注意的細節:

1.一個java檔案中可以出現多句導包語句。
2."*"是導包語句的萬用字元。可以匹配任何的類名。
3.import aa.*;是不會作用於aa包下面的子包的。

推薦使用:

import 包名.類名;   因為使用*萬用字元會導致結構不清晰。
許可權修飾符

許可權修飾符就是控制被修飾的成員的範圍可見度。

            public(公用)    protected(受保護)    default(預設)   private (大到小)同一個類      true             true                true         true同一個包      true             true                true         false  子父類        true             true                false        false不同包        true             false               false        false

注意:在不同包下面只有public與protected可以訪問,而且protected必須是在繼承關係下才能夠訪問。

打jar包:需要使用到jdk的開發工具(jar.exe).

jar的用法:

使用格式:

jar cvf jar檔案的名字  class檔案或者是檔案夾 

打jar包要注意的事項:

1.一個程式打完了jar之後必須要在資訊清單檔上指定入口類:格式 Main-Class:包名.類名
2.jar包雙擊運行僅對於圖形化介面的程式起作用,對控制台的程式不起作用。

jar檔案的作用:

1.方便使用者快速運行一個項目。
2.提供工具類以jar包的形式給別人使用。

如果使用jar包裡面的類必須要先設定classpath路徑。

jre = jvm+ 核心類庫

package qq;import javax.swing.*;class Demo9 {    public static void main(String[] args) {        System.out.println("QQ程式..");        JFrame frame = new JFrame("QQ程式");        frame.setSize(400,500);        frame.setVisible(true); //設定視窗可見。        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }}

java(異常體系及許可權修飾符)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.