Java異常處理throws/throw

Java的異常被分為兩大類:Checked異常和Runtime異常(運行時異常)。
? Runtime異常:所有的RuntimeException類及其子類的實例;
? Checked異常:不是RuntimeException類及其子類的異常實例。

只有Java語言提供了Checked異常,其他語言都沒有提供Checked異常。Java認為 Checked異常都是可以被處理(修復)的異常,所以Java程序必須顯式處理Checked 異常。如果程序沒有處理Checked異常,該程序在編譯時就會發生錯誤,無法通過編譯。
Checked異常體現了Java的設計哲學:沒有完善錯誤處理的代碼根本就不會被執行!
Runtime異常則更加靈活,Runtime異常無須顯式聲明拋出,如果程序需要捕獲 Runtime異常,也可以使用try…catch塊來實現。

一.使用throws拋出異常
使用throws聲明拋出異常的思路是,當前方法不知道如何處理這種類型的異常,該異常應該由上級調用者處理;如果main方法也不知道如何處理這種類型的異常,也可以使用throws聲明拋出異常,該異常將交給JVM處理。JVM對異常的處理方法是,打印 異常的跟蹤棧信息,并中止程序運行。
如下示例:

public class ThrowsDemo {public static void main(String[] args) {//throws Exception  虛擬機在處理// 數組索引越界 ArrayIndexOutOfBoundsException//String[] strs = {"1"};// 數字格式異常 NumberFormatException//String[] strs = {"1.8,1"};// 算術異常(除零) ArithmeticExceptionString[] strs = {"18","0"};//intDivide(strs);//虛擬機在處理try {//當 main 方法也不想處理,把異常拋出去,就是java 虛擬機在處理intDivide(strs);} catch (Exception e) {System.out.println("main 異常處理");e.printStackTrace();}		}		public static void intDivide(String[] strs)throws ArrayIndexOutOfBoundsException,IndexOutOfBoundsException,NumberFormatException,ArithmeticException{		int a = Integer.parseInt(strs[0]);int b = Integer.parseInt(strs[1]);int c = a/b;				System.out.println("結果是:"+c);	}
}

結果如下:
在這里插入圖片描述
二.使用throw拋出異常
Java也允許程序自行拋出異常,自行拋出異常使用throw語句來完成(注意此處的 throw沒有后面的s)。
如果需要在程序中自行拋出異常,則應使用throw語句,throw語句可以單獨使用, throw語句拋出的不是異常類,而是一個異常實例,而且每次只能拋出一個異常實例。
如下示例:

public class ThrowDemo {public static void main(String[] args) {//數組索引越界 ArrayIndexOutOfBoundsExceptionString[] str1 = {"1"};// 數字格式異常 NumberFormatException//String[] str2 = {"1.8,1"};// 算術異常(除零) ArithmeticException//String[] str3 = {"18","0"};	try {intDivide(str1);} catch (Exception e) {e.printStackTrace();}		}		public static void intDivide(String[] str0) throws Exception{		try {int a = Integer.parseInt(str0[0]);int b = Integer.parseInt(str0[1]);int c = a/b;System.out.println("結果是:"+c);							}catch (ArrayIndexOutOfBoundsException e) {throw new Exception("數組索引越界");}catch (IndexOutOfBoundsException e) {throw new Exception("索引越界");}catch (NumberFormatException e) {throw new Exception("數字轉換失敗");}catch (ArithmeticException e) {throw new Exception("計算錯誤");}	catch (Exception e) {System.out.println("其他異常");e.printStackTrace();}				if (str0.length<2) {//自行拋出 Exception異常//該代碼必須處于try塊里,或處于帶 throws聲明的方法中throw new Exception("參數個數不夠");}			if (str0[1]!=null && str0[1].equals("0")) {//自行拋出 RuntimeException異常,既可以顯式捕獲該異常//也可完全不理會該異常,把該異常交給該方法調用者處理throw new RuntimeException("除數不能為0");}int a = Integer.parseInt(str0[0]);int b = Integer.parseInt(str0[1]);int c = a/b;System.out.println("結果為:"+c);}	
}

結果如下:
在這里插入圖片描述

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

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

相關文章

JDBC 連接MYSQL數據庫

1. 加載驅動 Class.forName("com.mysql.jdbc.Driver");com.mysql.jdbc 包名 Driver 驅動名&#xff0c;驅動包需要引入進來 mysql com.mysql.jdbc.Driveroracle oracle.jdbc.driver.OracleDriversqlserver com.microsoft.sqlserver.jdbc.SQLServerDriver …

JSP 之輸出九九乘法表

JSP是一種建立在Servlet規范提供的功能之上的動態網頁技術&#xff0c;允許在網頁文件中嵌入java代碼和jsp標記。Java 服務器頁面 (Java Server Page &#xff0c;JSP) 擴展名為 .jsp。 1&#xff0e;jsp的執行過程 Jsp文件在用戶第一次請求時,會被編譯成Servlet,然后由這個Se…

Java 重寫與重載

方法的重寫&#xff1a; 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。 重寫的好處在于子類可以根據需要&#xff0c;定義特定于自己的行為。 也就是說子類能夠根據需要實現父類的方法。 重寫方法不能拋出新的檢查異常或者比被重寫方法申…

Java新增

在實踐項目中我們有可能需要做到新增功能&#xff0c;新增一張表&#xff0c;或是新增多張表。這里我新增的是一張表。 這里主要描述DAO層與Servlet 層&#xff1a; DAO 層&#xff1a; public class UserDaoImpl implements UserDao {private Connection con null;private P…

JSP根據狀態動態改變數據表格按鈕

有時候在開發的過程中會遇到需要根據狀態ID 來動態改變數據表格的按鈕&#xff0c;下面我主要講述兩種表格根據ID改變按鈕的方式。 下面這種我是用EL 表達式獲取表格中的值&#xff1a; <table class"table table-striped table-bordered table-hover" id"s…

Java 模糊查詢

在學習Java 這門語言過程中&#xff0c;會遇到無數的知識點與錯誤&#xff0c;最重要的是我們能夠在茫茫的代碼中找到突破口&#xff0c;并用心去汲取精華。 在很多時候我們會用到模糊查詢&#xff0c;這里是我在編碼過程中用到的模糊查詢。 JSP &#xff1a; <input value…

Java刪除表

Java刪除表 這里頁面我用了layui 框架做刪除的&#xff0c;這里需要引入layui 的css 與js 插件&#xff0c;這里寫出主要的代碼。 Jsp &#xff1a; //監聽行工具事件table.on(tool(test), function(obj){var data obj.data; //獲得當前行數據var date1 data.classifyColum…

原始分頁

Jsp &#xff1a; <div style"float: right;">當前為${currentPage}頁&#xff0c;共有${totalRow}條數據&#xff0c;共${totalPage}頁 <select style"border-radius: 18px;" id"pageSize" name"pageSize" onchange"c…

根據銀行卡號判斷銀行卡是否正確與歸屬銀行

校驗過程&#xff1a; 1.從卡號的最后一位數字開始&#xff0c;逆向將奇數位&#xff08;1&#xff0c;3&#xff0c;5 等等相加&#xff09; 2.從卡號最后一位數字開始&#xff0c;逆向將偶數位數字&#xff0c;先乘以2&#xff0c;如果乘積為兩位數&#xff0c;將個位數字相加…

根據年月日判斷第多少天,星期幾

1. 根據年月日判斷第多少天 Scanner是SDK1.5新增的一個類,可使用該類創建一個對象。 Scanner scannernew Scanner(System.in);  然后scanner對象調用下列方法&#xff08;函數&#xff09;,讀取用戶在命令行輸入的各種數據類型   next.Byte(),nextDouble(),nextFloat,nextIn…

解決MySQLyog 導入數據庫文件沒有反應

之前我在MySQL 中新建了一個數據庫&#xff0c;名為“onlineclassroom” 的數據庫&#xff0c;但是在將外部的.sql 文件導入進來之后發現&#xff0c;數據庫沒有反應&#xff0c;也看不到表數據&#xff0c;以為是沒有刷新問題&#xff0c;但是刷新之后發現還是沒有這個就很奇怪…

解決myeclipse報錯500,MySQLyog報錯誤碼問題

在myeclipse 寫了一個登錄&#xff0c;但在我登錄的時候卻報了500的空指針&#xff0c;我檢查了自己的登錄代碼&#xff0c;發現沒有問題&#xff0c;這不應該啊&#xff0c;然后在網上也尋找了一些解決方案&#xff0c;發現好像并不適用&#xff0c;500空指針如下&#xff1a;…

Java防止用戶同一時間重復登錄(包括異地登錄)

有時候我們在做登錄模塊過程中難免會遇到這種問題&#xff0c;即使我們給用戶進行了多重判斷&#xff0c;比如&#xff1a;用戶名&#xff0c;管理員&#xff0c;驗證碼&#xff0c;一系列的判斷… 你是否真正考慮到用戶的體驗&#xff0c;比如不能讓用戶在同一時間&#xff0c…

jquery點擊彈出播放視頻并顯示遮罩層

最近在做視頻播放的時候&#xff0c;發現用jquery的播放視頻可以很好的實現我所需要的效果。在之前請把插件引用進來&#xff0c;廢話不多說&#xff0c;代碼如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><meta …

JS實現圖片循環滾動

之前在前端的時候有遇到這樣一個問題&#xff0c;實現 JS 圖片的循環滾動&#xff0c;然后鼠標移入的時候停止滾動&#xff0c;鼠標移開繼續滾動&#xff0c;這里無非就是設置了一個定時器&#xff0c;鼠標移上時清除定時器達到滾動停止的目的&#xff0c;鼠標移開時重設定時器…

有趣的滾動條

今天在搭前端頁面的時候&#xff0c;UI給過來的一個自定義的滾動條&#xff0c;要求必須與設計的一樣&#xff0c;覺得有點有趣&#xff0c;現在記錄一下。 效果圖&#xff1a; 具體代碼是這樣的&#xff1a; /*字體太長&#xff0c;這里我就減少一些*/ <div class"l…

查詢分頁的幾種sql語句

sql server 中的分頁查詢sql語句不跟mysql 一樣&#xff0c;mysql 用 limit 可以實現查詢sql分頁。如&#xff1a; select * from news where id>(select id from news limit 250000,1) limit 10; //相對執行效率高 select * from news limit 250000,10;mysql 中 limit總是…

c#解決在數據表格中無法顯示秒數問題

在查詢日期的時候&#xff08;年月日時分秒&#xff09;&#xff0c;發現丟失了秒&#xff0c;在這里我用的是自己 封裝的Vo類里面的時間轉換&#xff0c;沒有把秒數查詢出來&#xff0c;在Vo動不了手&#xff0c;我還不能對Controller 動手了&#xff1f; 查詢&#xff1a; 更…

解決 idea 復制jsp 文件過來頁面報404

今天在做功能的時候把另外一個jsp文件復制過來&#xff0c;發現頁面一直報404&#xff0c;咋搞的&#xff0c;檢查路徑沒有問題&#xff0c;報404這個就奇葩了&#xff0c;后面經過一番“洗腦”&#xff0c;才發現jsp文件復制過來少了一個特別重要的步驟&#xff0c;那就是重新…

解決ckeditor富文本在layui 彈框中大小字體等下拉不顯示

css <div class"layui-input-inline" style"width:1100px;"><div class"noticeContent"><textarea id"Introduce1" name"處分結果" class"form-control" style"z-index:19991015">&…