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

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

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

一、Java IO流

1、概念

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

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

  • 輸入流:只能從中讀取數(shù)據(jù),不能寫入
  • 輸出流:只能寫入數(shù)據(jù),不能讀取數(shù)據(jù)

3、IO流的分類(按操作單元?jiǎng)澐郑?/h3>
  • 字節(jié)流:操作單元是8位的字節(jié),主要是 InputStream 和 OutputStream 作為基類
  • 字符流:操作單元是16位的字符,主要是 Reader 和 Writer 作為基類

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

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

二、Java 異常

1、概述

  • Java在運(yùn)行程序過程中出現(xiàn)的錯(cuò)誤

在這里插入圖片描述

2、常見的異常

  • 空指針異常類:NullPointerException
  • 類型強(qiáng)制轉(zhuǎn)換異常:ClassCastException
  • 數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException
  • 算術(shù)異常類:ArithmeticExecption
  • 數(shù)組負(fù)下標(biāo)異常:NegativeArrayException

在這里插入圖片描述

3、異常的分類

在這里插入圖片描述

在這里插入圖片描述

三、異常處理方案

1、try…catch…finally

格式:

try {
	可能出現(xiàn)問題的代碼;
}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 {//有沒有異常都會(huì)執(zhí)行 finally 里的代碼
            System.out.println("釋放資源,必須執(zhí)行的代碼塊");
        }
        //System.out.println(arr[5]);//數(shù)組下標(biāo)越界
        System.out.println("end");
    }
}

在這里插入圖片描述

變形格式:

try {
 	可能出現(xiàn)問題的代碼;
}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 里面必須有內(nèi)容,哪怕給出一個(gè)簡單的提示

四、try…catch 處理方式

1、一個(gè)異常的情況與多個(gè)異常的情況

package yichang01;
public class ExceptionDemo {
    public static void main(String[] args) {
        //method1();//一個(gè)異常的情況
        //method2();//兩個(gè)異常、分別處理的情況
        //method3();//兩個(gè)異常、一塊處理的情況
        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("這里出現(xiàn)了一個(gè)異常,你不太清楚是誰,該怎么辦呢?");
        } catch (ArithmeticException e) {
            System.out.println("除數(shù)不能為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("除數(shù)不能為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()

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

4、printStackTrace(PrintStream s)

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

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、概述

定義功能方法時(shí),需要把出現(xiàn)的問題暴露出來,讓調(diào)用者去處理

在這里插入圖片描述

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 {//運(yùn)行期異常拋出
        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、概述

在功能方法內(nèi)部出現(xiàn)某種情況,程序不能繼續(xù)運(yùn)行,需要進(jìn)行跳轉(zhuǎn)時(shí),用 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:方法內(nèi)部,一般出現(xiàn)了邏輯錯(cuò)誤,手動(dòng)拋出的自定義異常
            } catch (Exception e) {
                e.printStackTrace();
            }
            this.age = 1;
        }
    }
}

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

throws

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

throw

  • 用在方法體內(nèi),跟的是異常對象名
  • 只能拋出一個(gè)異常對象名
  • 拋出異常,由方法體內(nèi)的語句處理
  • 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控制的語句體一定會(huì)執(zhí)行

用于釋放資源,在IO流操作和數(shù)據(jù)庫操作中會(huì)見到

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 {//釋放資源,會(huì)執(zhí)行的代碼
            System.out.println("finally");
            a = 40;
            return a;
        }
        // return a;
    }
}

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

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

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

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

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

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

十一、異常注意事項(xiàng)

  • 子類重寫父類方法時(shí),子類的方法必須拋出相同的異?;蚋割惍惓5淖宇悺?父親壞了,兒子不能比父親更壞)
  • 如果父類拋出了多個(gè)異常,子類重寫父類時(shí),只能拋出相同的異?;蛘呤撬淖蛹?,子類不能拋出父類沒有的異常
  • 如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內(nèi)有異常發(fā)生,那么子類只能try,不能throws

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    java利用DFA算法實(shí)現(xiàn)敏感詞過濾功能

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

    深入了解HttpClient的ResponseHandler接口

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

    Java遠(yuǎn)程共享目錄的操作代碼

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

    eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法

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

    Java多線程及分布式爬蟲架構(gòu)原理解析

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

    spring-boot集成spring-security的oauth2實(shí)現(xiàn)github登錄網(wǎng)站的示例

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

    基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

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

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

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

    Java反射機(jī)制的簡單講解

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

最新評(píng)論

东至县| 广州市| 广昌县| 营口市| 花垣县| 三江| 惠东县| 额尔古纳市| 新乐市| 九台市| 西林县| 兴国县| 墨脱县| 大竹县| 永康市| 耒阳市| 盐津县| 翁源县| 宣恩县| 大姚县| 汽车| 梅河口市| 千阳县| 无锡市| 潍坊市| 十堰市| 旬邑县| 华蓥市| 神木县| 留坝县| 巩义市| 盘锦市| 宜宾县| 交城县| 墨竹工卡县| 赤壁市| 怀宁县| 伊宁市| 遵义县| 信宜市| 中宁县|