java免檢異常_java-異常

java提供了異常處理機制:程序運行受阻時候的處理方式。

1、異常分類

8d526f581ba87ece4f06fe82c109a110.png

Error:系統錯誤,由java虛擬機拋出,很少發生;免檢異常

RuntimeException:程序設計錯誤,通常由java虛擬機拋出;免檢異常

Exception的其它異常:必檢異常,通過try-catch或者throws申明拋出

2、聲明異常:在方法聲明中使用throws聲明異常

public void method() throwsClassNotFoundException{//...

}

注意:子類重寫了父類的方法,子類的方法拋出的異常必須在被覆蓋的父類的方法中聲明中,否則不滿足java的多態使用,會報錯。

3、拋出異常:在方法內部使用throw拋出異常,在方法上必須先聲明異常

packagecom.yichang;public classMain {public static voidmain(String[] args) {try{

method1();

}catch(Exception e){

e.printStackTrace();

}

}public static void method1() throwsException{try{

method2();

}catch(Exception e) {throw e;

//throw new Exception("method1 exception", e);或者 throw new Exception(e);

//throw throw (Exception)e.fillInStackTrace();

}

}public static void method2() throwsException{throw new Exception("method2 exception");

}

}

可以拋出新建的異常,如上throw new Exception("method2 exception");

重新拋出異常

重新拋出異常--拋出當前捕獲的異常,如上method1的throw e;

java.lang.Exception: method2 exception

at com.yichang.Main.method2(Main.java:24)

at com.yichang.Main.method1(Main.java:17)

at com.yichang.Main.main(Main.java:8)

重新拋出異常--拋出鏈式異常:捕獲一個異常后拋出另一個異常,并把原始的異常信息保存下了,如上throw new Exception("method1 exception", e)

java.lang.Exception: method1 exception

at com.yichang.Main.method1(Main.java:19)

at com.yichang.Main.main(Main.java:8)

Caused by: java.lang.Exception: method2 exception

at com.yichang.Main.method2(Main.java:24)

at com.yichang.Main.method1(Main.java:17)

...1 more

或者如上throw new Exception(e)

java.lang.Exception: java.lang.Exception: method2 exception

at com.yichang.Main.method1(Main.java:19)

at com.yichang.Main.main(Main.java:8)

Caused by: java.lang.Exception: method2 exception

at com.yichang.Main.method2(Main.java:24)

at com.yichang.Main.method1(Main.java:17)

...1 more

重新拋出異常--當前拋出點為異常新的拋出點,見throw throw (Exception)e.fillInStackTrace();其中fillInStackTrace()方法返回Throwable,需強制類型轉換,以便被catch捕獲

java.lang.Exception: method2 exception

at com.yichang.Main.method1(Main.java:29)

at com.yichang.Main.main(Main.java:8)

4、捕獲異常:使用catch捕獲處理異常

try{//業務邏輯

catch(IOException){//異常處理

}catch(Exception e){//異常處理

}finally{

}

捕獲到異常e,可以使用異常API獲取詳細的信息

getMessage()

toString() 返回格式:“異常全類名:getMessage的字符串”

printStackTrace() 在控制臺打印異常調用棧信息,getStackTrace()獲取StackTraceElemen[]數組

main函數修改如下:

public static voidmain(String[] args) {try{

method1();

}catch(Exception e){

e.printStackTrace();

System.out.println(e.getMessage());

System.out.println(e.toString());

StackTraceElement[] stackTraceElements=e.getStackTrace();for(StackTraceElement stackTraceElement: stackTraceElements) {

System.out.println(stackTraceElement.getMethodName()+" "

+stackTraceElement.getClassName()+" "

+stackTraceElement.getLineNumber());

}

}

}

輸出結果:

java.lang.Exception: method1 exception

at com.yichang.Main.method1(Main.java:27)

at com.yichang.Main.main(Main.java:8)

Caused by: java.lang.Exception: method2 exception

at com.yichang.Main.method2(Main.java:32)

at com.yichang.Main.method1(Main.java:25)

...1more

method1 exception

java.lang.Exception: method1 exception

method1 com.yichang.Main27main com.yichang.Main8

finally 與 return 、break 、continue使用時,finally也會得到執行

packagecom.yichang;public classMain {public static voidmain(String[] args) {int num=method1();

System.out.println("main方法中的num="+num);

}public static intmethod1(){int num=100;try{return ++num;

}catch(Exception e) {

e.printStackTrace();

}finally{

num--;

System.out.println("執行finally塊, 當前num="+num);

}return -1;

}

}

輸出結果:

執行finally塊, 當前num=100main方法中的num=101

異常丟失:如果在finally中有return,在try中拋出了異常,且沒有捕獲,會造成異常丟失

packagecom.yichang;public classMain {public static voidmain(String[] args) {int num=method1();

System.out.println("main方法中的num="+num);

}public static intmethod1(){try{throw new RuntimeException("異常了...");

}finally{

System.out.println("執行finally");return 1;

}

}

輸出結果:

執行finally

main方法中的num=1

5、自定義異常

通常是繼承Exception類,并使用默認構造器,最簡單的自定義異常為:

packagecom.yichang;public class MyException extendsException {

}

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

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

相關文章

java編程需要數學知識嗎_初學Java編程,需要英語和數學基礎嗎?

原標題:初學Java編程,需要英語和數學基礎嗎?“學習Java編程英語和數學是必備條件嗎?”很多Java零基礎學習或者轉型IT行業的都會有這樣的疑問,其實剛開始學習Java編程是不需要太高深的數學和英語基礎的。剛開始學習Java…

java map put報錯_java 集合(Map)

-------------------|Map 儲存的數據都是以鍵值對的形式,鍵不可重復,值可重復。----------------------------| HashMap----------------------------| TreeMap----------------------------| HashTableMap接口的方法:添加:put(K…

java簡單數據結構_圖解Java常用數據結構

最近在整理數據結構方面的知識, 系統化看了下 Java 中常用數據結構, 突發奇想用動畫來繪制數據流轉過程.主要基于 jdk8, 可能會有些特性與 jdk7 之前不相同, 例如 LinkedList LinkedHashMap 中的雙向列表不再是回環的.HashMap 中的單鏈表是尾插, 而不是頭插入等等, 后文不再贅敘…

jest java_?使用jest進行測試驅動開發

前言本文將使用jest進行測試驅動開發的示例,源碼在github。重點說明在開發中引入單元測試后開發過程,以及測試先行的開發思路。本文的重點是過程以及思維方法,框架以及用法不是重點。本文使用的編程語言是javascript,思路對其他語…

mysql sqlstate 08001_關于Toad連接DB2的sqlstate=08001錯誤

新裝的centos6.3db29.7,數據庫導入完了的之后用Toad連接訪問之的時候出錯了。DB2 Database Error: ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being use…

mysql 設置主鍵命令_MySQL常用命令

1、修改MySQL密碼方法一:use mysql;update user set passwordPASSWORD(“123456”) where user‘root’;flush privileges;忘記密碼:sed -ri 3d skip-grant-tables /etc/my.cnfsystemctl restart mariadbuse mysql&…

python 整除的數組_計算和可被整除的所有子數組

在我學習面試的時候,我在GeeksForGeeks上找到了這個問題和解決方案,但不明白答案。在上面說的是Let there be a subarray (i, j) whose sum is divisible by ksum(i, j) sum(0, j) - sum(0, i-1)Sum for any subarray can be written as q*k rem where…

java ha_java – Haproxy Bad Gateway 502

所以我在Jetty servlet面前使用HAProxy.目前的目標只是在配置完所有內容后進行概念驗證,加載和壓力測試.但是我在配置haproxy時遇到問題.我知道這不是我的應用程序的問題,因為我有運行nginx(tengine),一切正常.所以它必須與haproxy配置或haproxy工作的方式不適合我的需要.所以我…

java ioutils_java – 無法解析符號’IOUtils’

我使用以下代碼在我的Android應用程序中創建一個臨時文件:public File streamToFile (InputStream in) throws IOException {File tempFile File.createTempFile("sample", ".tmp");tempFile.deleteOnExit();FileOutputStream out new FileOu…

java const關鍵字_const關鍵字:終于擁有真正的常量聲明語句

你好,今天大叔想和你嘮扯嘮扯 ES6 新增的關鍵字 —— const。在說 const 關鍵字之前,大叔先和你嘮嘮大叔自己對 const 的感受 —— JavaScript 尼瑪終于可以聲明真正的常量啦!大叔為啥會發出這樣滴感嘆?實在是“天下苦秦久矣”呀~…

workerman高并發異步mysql_workerman怎么實現高并發

并發概念太模糊,這里以兩種可以量化的指標并發連接數和并發請求數來說明。并發連接數是指服務器當前時刻一共維持了多少TCP連接,而這些連接上是否有數據通訊并不關注。 (推薦學習: workerman教程)例如一臺消息推送服務器上可能維持了百萬的設…

checkout 撤銷修改_Git的4個階段的撤銷更改

雖然git誕生距今已有12年之久,網上各種關于git的介紹文章數不勝數,但是依然有很多人(包括我自己在內)對于它的功能不能完全掌握。以下的介紹只是基于我個人對于git的理解,并且可能生編硬造了一些不完全符合git說法的詞語。目的只是為了讓git通…

移除Java對象中的屬性_在java對象中添加和刪除屬性

我怎樣才能在 java中實現這一點.我有一個具有屬性的對象.public class Object {private final Credentials Credentials;private final int PageSize;private final int PageStart;private final int DefaultFilterId;public Object(Credentials Credentials, int PageSize, in…

java軟件開發ea介紹_開發說明 — Eacloud 1.0 documentation

PHP 代碼示例( Linux 版)解壓后,參考 phplinux/v3.4.0.1/文檔/PHP版服務器端工具包(Linux版)軟件使用手冊.pdfDemo 運行1.安裝對應版本的 PHP2.安裝運行時環境(glibc 庫等)3.修改 PHP 的配置文件 php.ini修改 php.ini,使 php 允許加載擴展,并…

java中operationBox_Java使用PDFBox開發包實現對PDF文檔內容編輯與保存

pdfbox開發包下載地址:http://pdfbox.apache.org/程序實現了PDF文檔的創建,讀入,與修改PDF內容并保存。可能有個前提,PDF文檔不是加密的,如果加密怎么辦,我沒研究過!源代碼如下:pack…

java訪問權限最高_java 訪問權限

Java語言中的訪問權限修飾符有4種,但是僅有3個關鍵字,因為不寫訪問權限,在Java中被稱為默認權限,或同包權限,本文中以(default)代替。下面按照權限從小到大的順序對4中訪問權限分別介紹。class我個人,我有很…

java中 queryparam_java – 何時使用@QueryParam和@PathParam

我不是問這里已經問過的問題:What is the difference between PathParam and QueryParam這是一個“最佳實踐”或常規問題。什么時候使用PathParam和QueryParam。我可以想到的是,決定可能使用兩者來區分信息模式。讓我在下面說明我的LTPO – 不完美的觀察…

java中fork函數_java中的forkjoin框架的使用

fork join框架是java 7中引入框架,這個框架的引入主要是為了提升并行計算的能力。fork join主要有兩個步驟,第一就是fork,將一個大任務分成很多個小任務,第二就是join,將第一個任務的結果join起來,生成最后…

Java h264起始碼_h.264 – 使用H264視頻的起始碼

有兩種H.264流格式,有時也稱為>附件B(在原始H.264流中找到)> AVCC(在像MP4這樣的容器中找到)H.264流由NAL(包裝單位)組成(1)附件B:在每個NAL單元的字節[x00] [x00] [x00] [x01]之前有4字節的起始碼.[start code]--[NAL]--[start code]--[NAL] etc(2)AVCC&…

java中已定義類型car_Java 8 習慣用語(8):Java 知道您的類型

Java?8是第一個支持類型推斷的 Java 版本,而且它僅對 lambda 表達式支持此功能。在 lambda表達式中使用類型推斷具有強大的作用,它將幫助您做好準備以應對未來的 Java版本,在今后的版本中還會將類型推斷用于變量等更多可能。這里的訣竅在于恰…