最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?IO流—異常及捕獲異常處理?try…catch…finally

 更新時間:2021年12月10日 10:23:15   作者:CSDN-Lemon  
這篇文章主要介紹了Java?IO流—異常及捕獲異常處理?try…catch…finally,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、Java IO流

1、概念

  • 在Java中,把不同的輸入源 / 輸出源(如:鍵盤、文件、網絡鏈接等)抽象的表述為“流”(stream)
  • 通過 ”流“ 的形式允許Java程序使用相同的方式訪問不同的輸入 / 輸出源
  • Java 把所有傳統的”流“放在了 java . io 包下

2、IO流的分類(按流向劃分)

  • 輸入流:只能從中讀取數據,不能寫入
  • 輸出流:只能寫入數據,不能讀取數據

3、IO流的分類(按操作單元劃分)

  • 字節(jié)流:操作單元是8位的字節(jié),主要是 InputStream 和 OutputStream 作為基類
  • 字符流:操作單元是16位的字符,主要是 Reader 和 Writer 作為基類

4、IO流的分類(流的角色劃分)

  • 節(jié)點流:可以向一個特定的 IO 設備(如磁盤等)讀 / 寫數據的流,也稱為:低級流
  • 處理流:用于對一個已存在的流進行連接和封裝,通過封裝后的流來實現數據的讀/寫功能,也稱為高級流

二、Java 異常

1、概述

  • Java在運行程序過程中出現的錯誤

在這里插入圖片描述

2、常見的異常

  • 空指針異常類:NullPointerException
  • 類型強制轉換異常:ClassCastException
  • 數組下標越界異常:ArrayIndexOutOfBoundsException
  • 算術異常類:ArithmeticExecption
  • 數組負下標異常:NegativeArrayException

在這里插入圖片描述

3、異常的分類

在這里插入圖片描述

在這里插入圖片描述

三、異常處理方案

1、try…catch…finally

格式:

try {
	可能出現問題的代碼;
}catch(異常名 變量) {
	針對問題的處理;
}finally {
	釋放資源;
}

代碼:

package yichang01;
public class ExceptionDemo {
    public static void main(String[] args){
        System.out.println("start");
        int[] arr = {1,2,3,4,5};
        try {
            System.out.println(arr[5]);
        }catch (Exception e){
            System.out.println("發(fā)生了異常:"+e.getMessage());
            e.printStackTrace();//打印異常的棧
        }finally {//有沒有異常都會執(zhí)行 finally 里的代碼
            System.out.println("釋放資源,必須執(zhí)行的代碼塊");
        }
        //System.out.println(arr[5]);//數組下標越界
        System.out.println("end");
    }
}

在這里插入圖片描述

變形格式:

try {
 	可能出現問題的代碼;
}catch(異常名 變量) {
	針對問題的處理;
}
package yichang01;
public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("start");
        int a = 10;
        int b = 0;
        try {
            System.out.println(a / b);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        System.out.println("end");
    }
}

注意:

  • try 里面的代碼越少越好
  • catch 里面必須有內容,哪怕給出一個簡單的提示

四、try…catch 處理方式

1、一個異常的情況與多個異常的情況

package yichang01;
public class ExceptionDemo {
    public static void main(String[] args) {
        //method1();//一個異常的情況
        //method2();//兩個異常、分別處理的情況
        //method3();//兩個異常、一塊處理的情況
        method4();
    }
    private static void method4() {
        int a = 10;
        int b = 0;
        int[] arr = {1, 2, 3};
        try {
            Object o = 123;
            String s = (String) o; //ClassCastException
            System.out.println(arr[3]); //IndexOutOfBoundException
            System.out.println(a / b); //ArithmeticException
            System.out.println("這里出現了一個異常,你不太清楚是誰,該怎么辦呢?");
        } catch (ArithmeticException e) {
            System.out.println("除數不能為0");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("你訪問了不該的訪問的索引");
        } catch (Exception e) {
            System.out.println("出問題了");
        }
        System.out.println("over");
    }
    private static void method3() {
        int a = 10;
        int b = 0;
        int[] arr = {1, 2, 3, 4, 5};
        try {
            System.out.println(a / b);
            System.out.println(arr[5]);
        } catch (ArithmeticException e) {
            System.out.println("除數不能為0");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界");
        }
        System.out.println("end");
    }
    private static void method2() {
        int a = 10;
        int b = 0;
        try {
            System.out.println(a / b);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        System.out.println("end1");
        int[] arr = {1, 2, 3, 4};
        try {
            System.out.println(arr[4]);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        System.out.println("end2");
    }
    private static void method1() {
        int a = 10;
        int b = 0;
        try {
            System.out.println(a / b);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        System.out.println("end");
    }
}

五、Throwable中的方法

1、getMessage()

獲取異常信息,返回字符串。

2、toString()

獲取異常類名和異常信息,返回字符串。

3、printStackTrace()

獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。

4、printStackTrace(PrintStream s)

通常用該方法將異常內容保存在日志文件中,以便查閱。

package yichang01;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionDemo {
    public static void main(String[] args) {
        String s = "2019-06-17";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date d = sdf.parse(s);
            System.out.println(d);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            System.out.println(e.toString());
            e.printStackTrace();
        }
        System.out.println("end");
    }
}

六、throws

1、概述

定義功能方法時,需要把出現的問題暴露出來,讓調用者去處理

在這里插入圖片描述

package yichang02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionDemo {
    public static void main(String[] args) throws ParseException {
        System.out.println("start");
        method1();
        System.out.println("end11");
        //method2();
        System.out.println("end22");
    }
    private static void method2() throws ArithmeticException {//運行期異常拋出
        int a = 10;
        int b = 0;
        System.out.println(a / b);
    }
    private static void method1() throws ParseException {//編譯期異常拋出
        String s = "2014-11-20";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(s);
        System.out.println(d);
    }
}

七、throw

1、概述

在功能方法內部出現某種情況,程序不能繼續(xù)運行,需要進行跳轉時,用 throw 把異常對象拋出

package yichang02;
public class ExceptionDemo {
    public static void main(String[] args) {
        Student s = new Student();
        s.setAge(-30);
    }
}
class Student {
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age > 1) {
            this.age = age;
        } else {
            try {
                throw new Exception("年齡不能小于1");//throw:方法內部,一般出現了邏輯錯誤,手動拋出的自定義異常
            } catch (Exception e) {
                e.printStackTrace();
            }
            this.age = 1;
        }
    }
}

八、throws和throw的區(qū)別

throws

  • 用在方法聲明后,跟的是異常類名
  • 可以跟多個異常類名,用逗號隔開
  • 表示拋出異常,由該方法的調用者來處理
  • throws 表示出現異常的一種可能性,并不一定會發(fā)生這些異常

throw

  • 用在方法體內,跟的是異常對象名
  • 只能拋出一個異常對象名
  • 拋出異常,由方法體內的語句處理
  • throw 則是拋出了異常,執(zhí)行 throw 則一定拋出了某種異常
package yichang02;
class ExceptionDemo {
    public static void main(String[] args) {
        //method1();
        try {
            method2();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
    private static void method2() throws Exception {
        int a = 10;
        int b = 0;
        if (b == 0) {
            throw new Exception();
        } else {
            System.out.println(a / b);
        }
    }
    private static void method1() {
        int a = 10;
        int b = 0;
        if (b == 0) {
            throw new ArithmeticException();
        } else {
            System.out.println(a / b);
        }
    }
}

九、try…catch…finally…

1、格式

 try...catch...finally
 try...catch
 try...catch...catch...
 try...catch...catch...finally
 try...finally

2、注意

被finally控制的語句體一定會執(zhí)行

用于釋放資源,在IO流操作和數據庫操作中會見到

3、代碼

package yichang02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
class ExceptionDemo {
    public static void main(String[] args) {
        String s = "2019-6-17 12:12:12";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = null;
        try {
            d = sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
            System.exit(0);
        } finally {
            System.out.println("這是必然執(zhí)行的代碼");
        }
        System.out.println(d);
    }
}
package yichang02;
class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println(getInt());
    }
    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
            return a;
        } catch (Exception e) {
            System.out.println("catch");
            a = 30;
            return a;
        } finally {//釋放資源,會執(zhí)行的代碼
            System.out.println("finally");
            a = 40;
            return a;
        }
        // return a;
    }
}

十、final , finally 和 finalize的區(qū)別

1、final:最終的意思,可以修飾類,成員變量,成員方法

  • 修飾類,類不能被繼承
  • 修飾變量,變量是常量
  • 修飾方法,方法不能被重寫

2、finally:是異常處理的一部分,用于釋放資源。

  • 一般來說,代碼肯定會執(zhí)行,特殊情況:在執(zhí)行到finally之前jvm退出了

3、finalize:是Object類的一個方法,用于垃圾回收

十一、異常注意事項

  • 子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
  • 如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異?;蛘呤撬淖蛹?,子類不能拋出父類沒有的異常
  • 如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內有異常發(fā)生,那么子類只能try,不能throws

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring @Conditional注解講解及示例詳解

    Spring @Conditional注解講解及示例詳解

    這篇文章主要介紹了Spring @Conditional注解講解及示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • java利用DFA算法實現敏感詞過濾功能

    java利用DFA算法實現敏感詞過濾功能

    在最近的開發(fā)中遇到了敏感詞過濾,便去網上查閱了很多敏感詞過濾的資料,在這里也和大家分享一下自己的理解。下面這篇文章主要給大家介紹了關于java利用DFA算法實現敏感詞過濾功能的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • 深入了解HttpClient的ResponseHandler接口

    深入了解HttpClient的ResponseHandler接口

    這篇文章主要為大家介紹了深入了解HttpClient的ResponseHandler接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Java遠程共享目錄的操作代碼

    Java遠程共享目錄的操作代碼

    這篇文章主要介紹了java操作遠程共享目錄的實現代碼,非常不粗,具有參考借鑒價值,需要的朋友可以參考下
    2017-08-08
  • eclipse springboot工程打war包方法及再Tomcat中運行的方法

    eclipse springboot工程打war包方法及再Tomcat中運行的方法

    這篇文章主要介紹了eclipse springboot工程打war包方法及再Tomcat中運行的方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Java多線程及分布式爬蟲架構原理解析

    Java多線程及分布式爬蟲架構原理解析

    這篇文章主要介紹了Java多線程及分布式爬蟲架構原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • spring-boot集成spring-security的oauth2實現github登錄網站的示例

    spring-boot集成spring-security的oauth2實現github登錄網站的示例

    本篇文章主要介紹了spring-boot集成spring-security的oauth2實現github登錄網站的示例,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • 基于Struts2實現防止表單重復提交

    基于Struts2實現防止表單重復提交

    這篇文章主要介紹了基于Struts2實現防止表單重復提交,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數據庫表與 Java 對象,這篇文章主要介紹了MySQL 新增字段但 Java 實體未更新:潛在問題與解決方案,需要的朋友可以參考下
    2025-04-04
  • Java反射機制的簡單講解

    Java反射機制的簡單講解

    這篇文章主要介紹了Java反射機制的簡單講解,本文講解了Java的高級概念反射機制,通過文字介紹案例該項概念和代碼的詳細展示,需要的朋友可以參考下
    2021-07-07

最新評論

金山区| 罗城| 凉山| 宝丰县| 正镶白旗| 泰顺县| 成都市| 曲周县| 沁水县| 陆丰市| 体育| 清流县| 开江县| 留坝县| 临颍县| 芮城县| 丰镇市| 分宜县| 马关县| 桦南县| 美姑县| 夏津县| 凌源市| 新民市| 晴隆县| 阳泉市| 凉城县| 科技| 探索| 东乡族自治县| 江川县| 普陀区| 东阿县| 太仆寺旗| 额尔古纳市| 格尔木市| 长岭县| 阜康市| 岫岩| 临澧县| 炉霍县|