Java高級重點知識點-17-異常

文章目錄

  • 異常
  • 異常處理
  • 自定義異常

異常

指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。Java處 理異常的方式是中斷處理。

  1. 異常體系

異常的根類是 java.lang.Throwable,,其下有兩個子類:java.lang.Error 與 java.lang.Exception。
在這里插入圖片描述
在這里插入圖片描述

  1. 異常分類
  • 編譯時期異常:checked異常。在編譯時期,就會檢查,如果沒有處理異常,則編譯失敗。(如日期格式化異常)
  • 運行時期異常:runtime異常。在運行時期,檢查異常.在編譯時期,運行異常不會編譯器檢測(不報錯)。(如數學異常)

在這里插入圖片描述

異常處理

Java異常處理的五個關鍵字:try、catch、finally、throw、throws

  1. 拋出異常throw

使用格式:

throw new 異常類名(參數);
public class ExceptionDemo {public static int getElement(int[] arr , int index){if (index < 0 || index >= arr.length){throw new ArrayIndexOutOfBoundsException("數組下標越界啦!");}int element = arr[index];return element;}public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int index = 5;int element = getElement(arr, index);System.out.println(element);System.out.println("over");}
}

在這里插入圖片描述

  1. 聲明異常throws

使用格式:

修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2…{ }
import java.io.FileNotFoundException;
import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws FileNotFoundException,IOException{if (!file.equals("a.txt")){throw new FileNotFoundException("找不到文件");}int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正確");}else {throw new IOException("文件格式不正確");}}public static void main(String[] args) throws IOException {String file = "a.txt";findFile(file);System.out.println("over");}
}

在這里插入圖片描述

  1. 捕獲異常try…catch

Java中對異常有針對性的語句進行捕獲,可以對出現的異常進行指定方式的處理。

try{編寫可能會出現異常的代碼
}catch(異常類型 e){處理異常的代碼//記錄日志/打印異常信息/繼續拋出異常
}
  • 該方法不處理,而是聲明拋出,由該方法的調用者來處理(throws)。
  • 在方法中使用try-catch的語句塊來處理異常。
import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws IOException{int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正確");}else {throw new IOException("文件格式不正確");}}public static void main(String[] args){String file = "a.html";try {findFile(file);} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());}System.out.println("over");}
}

在這里插入圖片描述

Throwable類中定義了一些查看方法:

  • public String getMessage() :獲取異常的描述信息,原因(提示給用戶的時候,就提示錯誤原因。
  • public String toString() :獲取異常的類型和異常描述信息(不用)。
  • public void printStackTrace() :打印異常的跟蹤棧信息并輸出到控制臺。
  1. finally 代碼塊

有一些特定的代碼無論異常是否發生,都需要執行。因此我們就會使用finally關鍵字來解決這個問題

import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws IOException{int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正確");}else {throw new IOException("文件格式不正確");}}public static void main(String[] args){String file = "a.html";try {findFile(file);} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());} finally {System.out.println("不管出不出現異常都要執行!");}System.out.println("over");}
}

在這里插入圖片描述

  1. 多個異常進行捕獲的方式:
  • 多個異常分別處理。
  • 多個異常一次捕獲,多次處理。
  • 多個異常一次捕獲一次處理。

注意:

  • 運行時異常被拋出可以不處理。即不捕獲也不聲明拋出。
  • 如果finally有return語句,永遠返回finally中的結果,避免該情況.
  • 如果父類拋出了多個異常,子類重寫父類方法時,拋出和父類相同的異常或者是父類異常的子類或者不拋出異常。
  • 父類方法沒有拋出異常,子類重寫父類該方法時也不可拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出

自定義異常

異常類如何定義:

  1. 自定義一個編譯期異常: 自定義類 并繼承于 java.lang.Exception 。
    代碼示例:
	// 業務邏輯異常
public class MyException extends Exception {/*** 空參構造*/public MyException () {}/**** @param message 表示異常提示*/public MyException (String message) {super(message);}
}
  1. 自定義一個運行時期的異常類:自定義類 并繼承于 java.lang.RuntimeException 。
public class MyException extends RuntimeException {/*** 空參構造*/public MyException () {}/**** @param message 表示異常提示*/public MyException (String message) {super(message);}
}

總的來說就是,繼承異常類Exception或者RuntimeException,重寫空參構造方法和有參構造方法。

歡迎java熱愛者了解文章,作者將會持續更新中,期待各位友友的關注和收藏。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38097.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38097.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38097.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【QT】概述|對象樹模型|兩種控件模式|信號和槽|lambda

目錄 什么是QT 特點 QT程序 main函數 QT按鈕 純代碼模式 圖形化模式 對象樹模型 信號和槽 連接與斷開 自動連接 斷開連接 信號的發射 lambda表達式 基本語法 捕獲列表 Lambda表達式用于信號與槽的連接 例如 什么是QT Qt是一個跨平臺的C圖形用戶界面應用…

NeXT-Server 手動安裝

38 cd /home 使用 wget 下載你選擇的版本,https://go.dev/dl/ 找到適用于Linux的版本,你可以選擇 .tar.gz 格式的文件以用于Debian系統 39 wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz 40 tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz 42 echo ‘export PAT…

辦理河南公司企業信用等級3A證書流程和條件

企業信用等級3A證書屬于一種榮譽資質&#xff0c;是提升企業公信力和影響力保障的一項資質。信用等級是信用 (資信)評估機構根據企業資信評估結果對企業信用度劃分的等級類別&#xff0c;它反映了企業信用度的高低。AAA信用等級是一種等級劃分。代指企業的信用經過行業、機構評…

零成本搭建個人圖床服務器

前言 圖床服務器是一種用于存儲和管理圖片的服務器&#xff0c;可以給我們提供將圖片上傳后能外部訪問瀏覽的服務。這樣我們在寫文章時插入的說明圖片&#xff0c;就可以集中放到圖床里&#xff0c;既方便多平臺文章發布&#xff0c;又能統一管理和備份。 當然下面通過在 Git…

中藥材圖像識別:中醫與深度學習的融合(目標檢測)

親愛的讀者們&#xff0c;您是否在尋找某個特定的數據集&#xff0c;用于研究或項目實踐&#xff1f;歡迎您在評論區留言&#xff0c;或者通過公眾號私信告訴我&#xff0c;您想要的數據集的類型主題。小編會竭盡全力為您尋找&#xff0c;并在找到后第一時間與您分享。 一、引…

flink的窗口

目錄 窗口分類 1.按照驅動類型分類 1. 時間窗口&#xff08;Time window&#xff09; 2.計數窗口&#xff08;Count window&#xff09; 2.按照窗口分配數據的規則分類 窗口API分類 API調用 窗口分配器器&#xff1a; 窗口函數 增量聚合函數&#xff1a; 全窗口函數…

MySQL高級-MVCC-原理分析(RC級別)

文章目錄 1、RC隔離級別下&#xff0c;在事務中每一次執行快照讀時生成ReadView2、先來看第一次快照讀具體的讀取過程&#xff1a;3、再來看第二次快照讀具體的讀取過程: 1、RC隔離級別下&#xff0c;在事務中每一次執行快照讀時生成ReadView 我們就來分析事務5中&#xff0c;兩…

VBA代碼解決方案第十五講:如何對單元格區域進行高亮顯示

《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程&#xff0c;目前已經是第三版修訂了。這套教程定位于入門后的提高&#xff0c;在學習這套教程過程中&#xff0c;側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼…

Java中集中常見的算法

以下是對選擇排序、冒泡排序和插入排序的理解及代碼實現 選擇排序&#xff1a; 理解&#xff1a;它通過不斷地從待排序元素中選擇最小&#xff08;或最大&#xff09;元素&#xff0c;并將其放置在已排序序列的一端。 代碼實現&#xff1a; public class SelectionSort {pu…

final、const、readonly關鍵字在不同語言中代表著什么

一、Java 1.被final修飾的類不能被繼承。 2.被final修飾的方法不能被重寫。 被 final 修飾的類中所有的成員方法都會隱式的定義為 final 方法。 若父類中 final 方法的訪問權限為 private &#xff0c;則子類中不能直接繼承該方法。此時可以在子類中定義相同方法名的函數&…

【操作系統期末速成】EP06 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;??????2.1 考點十四&#xff1a;同步互斥的基本概念2.2 考點十五&#xff1a;實現臨界區互斥的基本方法2.3 考點十六&#xff1a;信號量的含義及常用信號量 一、前言&#x1f680;&#x1…

品牌推廣的三個階段與核心內容,一篇文章全掌握!

在競爭激烈的市場環境中&#xff0c;品牌推廣是企業成功的關鍵。精心策劃的推廣策略能夠幫助企業在消費者心中樹立獨特的品牌形象&#xff0c;進而促進銷售增長。 作為一家手工酸奶品牌的創始人&#xff0c;目前全國也復制了100多家門店&#xff0c;我理解的品牌推廣分為3個階…

操作系統概論(二)

一、單項選擇題(本大題共20小題&#xff0c;每小題1分&#xff0c;共20分) 在每小題列出的四個備選項中只有一個選項是符合題目要求的&#xff0c;請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。 1&#xff0e;操作員接口是操作系統為用戶提供的使用計算機系統的手…

Vitis IDE 艱難切換--從傳統 Vitis GUI 到 2024.1 統一軟件界面

目錄 1. 簡介 2. 界面展示 2.1 啟動 2.2 Flow Navigator 2.1.1 C Simulation Dialog 2.1.2 C Synthesis 2.1.3 C/RTL Co-simulation 2.1.4 Implementation 2.1.5 Package 3. C Synthesis 詳解 3.1 Classic Configuration Settings 3.1.1 config_array_partition 3…

MySQL進階:存儲過程和函數

存儲過程和函數 1. 簡介2. 創建存儲過程使用MySQL工作臺創建存儲過程 3. 刪除存儲過程4. 參數帶默認值的參數參數驗證輸出參數 5. 變量6. 函數7. 其他約定 1. 簡介 存儲過程三大作用&#xff1a; 儲存和管理SQL代碼&#xff08;置于數據庫中&#xff0c;與應用層分離&#xf…

【力扣 28】找出字符串中第一個匹配項的下標 C++題解(字符串匹配)

給你兩個字符串 haystack 和 needle &#xff0c;請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標&#xff08;下標從 0 開始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;則返回 -1 。 示例 1&#xff1a; 輸入&#xff1a;haystack “s…

(13)DroneCAN 適配器節點(二)

文章目錄 前言 2 固件 2.1 基于F103 2.2 基于F303 2.3 基于F431 3 ArduPilot固件DroneCAN設置 3.1 f303-通用設置示例 4 DroneCAN適配器節點 前言 這些節點允許現有的 ArduPilot 支持的外圍設備作為 DroneCAN 或 MSP 設備適應 CAN 總線。這也允許擴展自動駕駛儀硬件的…

隨機文本生成器

目錄 開頭程序程序的流程圖程序打印的效果(不必細看&#xff0c;因為字符太多)例1例2例3 結尾 開頭 大家好&#xff0c;我叫這是我58。看&#xff01;這下面有一個程序。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <random> #includ…

快遞物流倉庫管理系統java項目springboot和vue的前后端分離系統java課程設計java畢業設計

文章目錄 快遞物流倉庫管理系統一、項目演示二、項目介紹三、部分功能截圖四、部分代碼展示五、底部獲取項目源碼&#xff08;9.9&#xffe5;帶走&#xff09; 快遞物流倉庫管理系統 一、項目演示 快遞物流倉庫管理系統 二、項目介紹 語言: Java 數據庫&#xff1a;MySQL 前…

寶塔安裝rabbitMQ實戰

服務器環境說明 阿里云服務器、寶塔、centos7 一、下載erlang 原因&#xff1a;RabbitMQ服務端代碼是使用并發式語言Erlang編寫的&#xff0c;安裝Rabbit MQ的前提是安裝Erlang。 下載地址&#xff1a;http://www.erlang.org/downloads 下載對應的版本&…