異常和IO

1.異常的概述分類

  異常就是java程序在運行過程當中出現的錯誤java

2.jvm默認是若是處理異常的

  main方法收到問題時,有兩種是處理方式程序員

  本身將問題處理,而後運行數組

  本身沒有針對問題的處理方式,只有交給調用main的jvm來處理,並將異常名稱,異常信息,異常出現的位置jvm

    打印在了控制檯上,同時將程序中止運行(也就是報錯)。this

 

3.try...catch的方式處理異常

  try時用來檢測異常spa

  catch是用來捕獲異常指針

  finally 釋放資源code

 

1     int i = 5;
2     int b = 0;
3     try {
4         int c = i/5;
5     } catch (Exception e) {
6             System.out.println(e.getMessage());        // 查看異常信息
7         }

 

 1       

    try...catch的方式處理多個異常對象

       JDK7之後處理多個異常的方式及注意事項blog

       int i = 5;
 2         int b = 0;
 3         try {
 4             int c = i / 5;
 5         } catch (ArithmeticException e) {//只能夠捕獲除零錯誤
 6             System.out.println("除數不能爲零");
 7         } catch (ArrayIndexOutOfBoundsException e) {//只能夠捕獲下標越界
 8             System.out.println("索引越界了");
 9 
10         } catch (Exception e) { // Exception e = new NullPointerException();
11             // 若是把全部的錯誤都放入Exception裏面,徹底能夠接收異常信息,可是不利於錯誤的查找
12             System.out.println("出錯了");
13         }
14         System.out.println("over");

 

  finally關鍵字

    被finally控制的語句體必定會執行

    特殊狀況:執行到finally 以前 jvm退出了System.exit(0))

  finally的做用:用於釋放資源,在IO流操做和數組庫操做中會見到

  IO流是須要打開的,打開以後須要關閉,在finally裏面關閉

  finally強大到用return結束方法也會執行

 

 

    

 

 1                 int i = 5;
 2         int b = 0;
 3         try {
 4             int c = i / 5;    
 5             //直接退出java虛擬機這是系統級別的退出,jvm不在運行
 6             System.exit(0);
 7         } catch (Exception e) {
 8             System.out.println("出錯了");
 9         }finally {
10             //try當中不管是渝澳catch,仍是return語句他都會執行
11             //除非退出java虛擬機
         //當出現java虛擬機退出時,finally中的語句就不會運行了,java程序直接終止運行
12 System.out.println("aaaaaaaaaaaaaaaaaaaa"); 13 } 14 System.out.println("over");

 

 

4.編譯期異常和運行期異常的區別

  java中異常被分爲兩類,編譯器異常和運行時異常,

    當上面出現了add或者surround的時候,就是程序出現了編譯器的異常信息,解決方法時要麼使用throws或者時使用trycatch進行包圍,才能使程序正常運行    

   編譯時異常:在編譯某個程序的時候,有可能會有這樣那樣的事情發生,好比文件找不到,這樣的異常就必須在編譯的時候處理

     若是不處理編譯通不過

   運行時異常:就是程序員所犯得錯誤,須要回來修改代碼

      就像空指針的時候你不賦值爲null.索引越界異常,你不越界

 

5.Throwable的幾個常見方法

  getMessage()  獲取異常信息,返回字符串

  toString()    獲取異常類名和異常信息,返回字符串

  printStackTrace()  獲取異常類名和異常信息,以及異常出如今程序中的位置,返回值void

  

 1     public static void main(String[] args) throws Exception {
 2         Student s = new Student();
 3         s.setAge(-13);    
 4     }
 5 
 6 
 7 
 8 
 9     public void setAge(int age)     throws Exception {
10         if(age > 0 && age < 150) {
11         this.age = age;
12         }else {
13             throw new RuntimeException("年齡輸入有誤");
14         }
15     }

 

 

6.throw 的概述 以及和 throws 的區別

  1.在功能方法內部出現某種狀況,程序不能繼續運行,須要進行跳轉時,就把異常對象拋出

 

  2.一個方法在使用throws進行拋出異常時,若是其餘方法調用了該方法,那麼調用方法必須也要拋出對應的異常,

    或者是使用try...catch 語句進行捕獲該異常

 

  throws:

    用在方法聲明的後面,跟的是異常類名

    能夠跟多個異常類名,用逗號隔開

    表示拋出異常,有該方法的調用者來處理

  throw

    用在方法體,跟的是異常對象名

 1   /**
 2      *
 3      * @param args
 4      * @throws AgeOutOfBoundsException  自定義異常
 5      */
 6     public static void main(String[] args) throws AgeOutOfBoundsException {
 7         Person p = new Person();
 8         // 捕獲異常
 9        try{
10            p.setAge(17);
11            System.out.println(p.getAge());
12        }catch (Exception e){
13            System.out.println("年齡非法");
14        }
15     }
16 }
17 
18 package com.jhedu.day20;
19 public class Person {
20     private String name;
21     private int age;
22     public Person() {
23         super();
24     }
25     public Person(String name, int age) {
26         super();
27         this.name = name;
28         this.age = age;
29     }
30     public String getName() {
31         return name;
32     }
33     public void setName(String name) {
34         this.name = name;
35     }
36     public int getAge() {
37         return age;
38     }
39     public void setAge(int age) throws AgeOutOfBoundsException {
40         if(age >0 && age <= 150) {
41             this.age = age;
42         }else {
43             throw new AgeOutOfBoundsException("年齡非法");
44         }
45     }
46 }
47 
48 package com.jhedu.day20;
49 public class AgeOutOfBoundsException extends Exception {
50     // 空參數的構造方法
51     public AgeOutOfBoundsException() {
52         super();   // 調用父類Exception的構造方法
53     }
54     // 有參數的構造方法
55     public AgeOutOfBoundsException(String message) {
56         super(message);  // 調用父類Exception的有參數構造方法
57     }

 

    只能拋出一個異常對象名

    表示拋出異常,有方法體內的語句處理

 

7.爲何須要自定義異常

  異常有不少子類就是爲了讓你更好的知道拋出的是啥異常,爲了有利於你排錯,抱不一樣異常表明不一樣的錯誤,看了名字就知道犯了什麼錯誤,就是爲了有個名字而已,所做的事情父類都去作了。

 

8.異常的注意事項以及如何使用異常處理

  1.子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異類的子類。

  2.若是父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或是他的子類,子類不能拋出父類沒有的異常

  3.若是被重寫的方法沒有異常拋出,那麼子類的方法絕對不能夠拋出異常,若是子類方法內有異常發生,那麼子類只能try,不能throws

  

  如何使用異常處理:若是該功能內部能夠將問題處理,用try,若是處理不了,交給調用者處理。。這是throws

 

 

  區別:後續程序須要繼續就運行try

     後續程序不須要運行就throws

    若是jdk沒有提供相對相應的異常,須要自定義異常

相關文章
相關標籤/搜索