java runtime 異常_Java中RuntimeException和Exception

在java的異常類體系中,Error和RuntimeException是非檢查型異常,其他的都是檢查型異常。

所有方法都可以在不聲明throws的情況下拋出RuntimeException及其子類

不可以在不聲明的情況下拋出非RuntimeException

簡單的說,非RuntimeException必要自己寫catch塊處理掉。

RuntimeException不用try catch捕捉將會導致程序運行中斷,若用則不會中斷

1.RuntimeException

今天摩根IT電面的時候被問到Exception和RuntimeException的區別,當時答不出來,大囧,晚上來學習一下。

首先看一段代碼,主要內容就是將字符串類型的數字轉化為整型的數字,然后讓兩個數字相乘,代碼如下:

public class RuntimeException {

public static void main(String[] args) {

// TODO Auto-generated method stub

String str="123";

int temp=Integer.parseInt(str);

System.out.println(temp*temp);

}

}

產看parseInt方法的源代碼如下:

public static int parseInt(String s) throws NumberFormatException {

return parseInt(s,10);

}

我們發現這個方法中拋出了NumberFormatException異常,但是在上面的代碼中我們沒有找到try...catch來處理,這是為什么呢。按照我們異常處理的知識,如果一個方法通過throws拋出了異常,那么可以在拋出異常的方法中不適用try...catch,但是在調用這個方法的地方必須有try...catch來處理。

下面來觀察NumberFormatException類的繼承關系:

24098926133075ce84bb69ad76f3727b.png

從上圖我們可以發現NumberFormatException是RuntimeException的子類,那么這就需要我們清楚Exception和RuntimeException的概念:

Exception:在程序中必須使用try...catch進行處理。

RuntimeException:可以不使用try...catch進行處理,但是如果有異常產生,則異常將由JVM進行處理。

對于RuntimeException的子類最好也使用異常處理機制。雖然RuntimeException的異常可以不使用try...catch進行處理,但是如果一旦發生異常,則肯定會導致程序中斷執行,所以,為了保證程序再出錯后依然可以執行,在開發代碼時最好使用try...catch的異常處理機制進行處理。

2.User Defined Exception

下面給出一個自定義異常的實例

class MyException extends Exception{

public MyException(String msg){

super(msg);

}

}

public class DefaultException {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try{

throw new MyException("自定義異常");

}catch(Exception e){

System.out.println(e);//edu.sjtu.ist.comutil.MyException: 自定義異常

//System.err.println(e);

// e.printStackTrace();

// StackTraceElement[] sts = e.getStackTrace();

// for (StackTraceElement st : sts){

// System.err.println(st);

// }

// System.err.println(e.getStackTrace());

}

}

}

class MyException extends Exception{

public MyException(String msg){

super(msg);

}

}

public class DefaultException {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try{

throw new MyException("自定義異常");

}catch(Exception e){

System.out.println(e);//edu.sjtu.ist.comutil.MyException: 自定義異常

//System.err.println(e);

// e.printStackTrace();

// StackTraceElement[] sts = e.getStackTrace();

// for (StackTraceElement st : sts){

// System.err.println(st);

// }

// System.err.println(e.getStackTrace());

}

}

}

class MyException extends Exception{

public MyException(String msg){

super(msg);

}

}

public class DefaultException {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try{

throw new MyException("自定義異常");

}catch(Exception e){

System.out.println(e);//edu.sjtu.ist.comutil.MyException: 自定義異常

//System.err.println(e);

// e.printStackTrace();

// StackTraceElement[] sts = e.getStackTrace();

// for (StackTraceElement st : sts){

// System.err.println(st);

// }

// System.err.println(e.getStackTrace());

}

}

}

輸出結果為:

MyException: 自定義異常

常見的RuntimeException- -

RuntimeException是開發中最容易遇到的,下面列舉一下常見的RuntimeException:

1、NullPointerException:見的最多了,其實很簡單,一般都是在null對象上調用方法了。

String s=null;

boolean eq=s.equals(""); // NullPointerException

這里你看的非常明白了,為什么一到程序中就暈呢?

public int getNumber(String str){

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

這個方法就有可能拋出NullPointerException,我建議你主動拋出異常,因為代碼一多,你可能又暈了。

public int getNumber(String str){

if(str==null) throw new NullPointerException("參數不能為空");

//你是否覺得明白多了

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

2、NumberFormatException:繼承IllegalArgumentException,字符串轉換為數字時出現。比如int i= Integer.parseInt("ab3");

3、ArrayIndexOutOfBoundsException:數組越界。比如 int[] a=new int[3]; int b=a[3];

4、StringIndexOutOfBoundsException:字符串越界。比如 String s="hello"; char c=s.chatAt(6);

5、ClassCastException:類型轉換錯誤。比如 Object obj=new Object(); String s=(String)obj;

6、UnsupportedOperationException:該操作不被支持。如果我們希望不支持這個方法,可以拋出這個異常。既然不支持還要這個干嗎?有可能子類中不想支持父類中有的方法,可以直接拋出這個異常。

7、ArithmeticException:算術錯誤,典型的就是0作為除數的時候。

8、IllegalArgumentException:非法參數,在把字符串轉換成數字的時候經常出現的一個異常,我們可以在自己的程序中好好利用這個異常。

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

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

相關文章

BZOJ3130: [Sdoi2013]費用流[最大流 實數二分]

3130: [Sdoi2013]費用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 505[Submit][Status][Discuss]Description Alice和Bob在圖論課程上學習了最大流和最小費用最大流的相關知識。 最大流問題:給定一張有向圖表示運輸網絡…

Linux Shell 003-變量

Linux Shell 003-變量 本節關鍵字:Linux、Shell、變量、全局變量、系統變量 相關指令:read、echo、unset、export 變量的含義 變量是用來臨時保存數據的,該數據是可以變化的數據。如果某個內容需要多次使用,并且在代碼中重復出現…

Java自動機實現

這篇文章將解決在Java中實現有限狀態機的問題。 如果您不知道什么是FSM或在什么地方可以使用FSM,您可能會熱衷于閱讀此 , 這個和這個 。 如果您發現自己在設計上使用FSM的情況,則可能已經開始為實現相同接口的每個狀態編寫類。 一個好的設計可…

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files這個文件找不到

在C:\Windows\Microsoft.NET\Framework64\v4.0.30319文件夾下面建立Temporary ASP.NET Files 文件夾(Framework64 注意64,這個可能是我們用的64位系統,但是vs2010不分32位還是64位,所以在C:\Windows\Microsoft.NET\Framework\v4.0…

java電腦運行視頻演示_javaweb視頻第一天(二)

無論通過哪種方式得到的class類對象,是同一個。比較的是地址碼這里教會你:如何去使用class對象現在就知道這個:如何使用反射,并且說反射是實現了什么樣的功能。如何通過反射得到里面的相應字段,得到里面的相應函數等等…

模型驅動 ModelDriven

ModelDriven:模型驅動,對所有action的模型對象進行批處理. 我們在開發中, 在action中一般是用實體對象,然后給實體對象get,set方法。 RegAction{   User user ;   //get/set} 然后在jsp頁面中給action中的user屬性綁定值是通過如下方式 &…

本月風味– Neo4j和Heroku

Neo4j今年早些時候發起了一項挑戰,即“ 種子播云 ”,以使人們使用Neo4j附加組件在Heroku上創建模板或演示應用程序。 經過許多內部辯論之后,我決定進入,但由于缺乏想法而陷入絕望。 當我什么都沒做的時候,這個主意就出…

1 + 11 + 1111+ 11111+ ..... + 11111(2016個) 結果是幾位數

# -*- coding: utf-8 -*- """ Created on Mon Mar 21 20:38:06 2016author: yanjie """1 11 1111 11111 ..... 11111(2016個) 結果是幾位數 用什么數據結構 有幾個6 寫算法a []; m 0; six 0; for i in range(2016,0,-1):b (im) % 10;m (…

[回歸分析][10]--相關誤差的問題

[回歸分析][10]--相關誤差的問題這一篇文章還是來分析相關誤差的問題。 1.游程數 定義:游程數--殘差穿過x-軸的次數 用這個可以檢查如殘差有一塊在x軸上面,一塊在x軸下面的情形。 如上面這樣的殘差 下面構造兩個統計量: 其中 n…

Spring 3 MVC異常處理程序

我遇到的大多數Spring 3錯誤處理示例代碼似乎都提供了其用法的最簡單概述,但是,有人說,如何處理錯誤比正常代碼的工作方式更為重要。 前一天,當我在Spring(2)錯誤處理程序中遇到一個簡單的GOTCHA時&#xf…

java編譯找不到符號_javac編譯時找不到符號?

我是個新手,在linux使用java編程時,出現這個情況。我把要引的包放在classpath中,紅色部分:export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/hadoop-1.0.4.core.jar:${CLASSPATH}通過echo $CLASSP…

全備份、差異備份和增量備份概念詳述

全備份、差異備份和增量備份概念詳述 1、完全備份(Full Backup) 備份全部選中的文件夾,并不依賴文件的存檔屬性來確定備份那些文件。在備份過程中,任何現有的標記都被清除,每個文件都被標記為已備份。換言之&#xff0…

微信接入登錄功能access_token流程記錄

提示:只有認證過的訂閱號或者服務號才能獲取access_token。 1.app微信登錄第一步是,app調起來微信客戶端,通過app端的配置,引入一個微信類庫, 2.授權成功后,微信會返回你一個code。 將APP_ID替換成你在微信…

使用MVC模式制作游戲-教程和簡介

游戲開發中一種有用的體系結構模式是MVC(模型視圖控制器)模式。 它有助于分離輸入邏輯,游戲邏輯和UI(渲染)。 在任何游戲開發項目的早期階段,其實用性很快就會被注意到,因為它允許快速更改內容&…

boost

參考博客 http://www.cnblogs.com/lidabo/p/3805487.html http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html http://www.cnblogs.com/finallyliuyu/archive/2013/05/23/3094246.html http://www.cnblogs.com/lidabo/p/3782193.html http://www.cnblogs.com/z…

moment格式換時間_不一樣的日期、時間轉換(moment.js)

無意中遇到了一種很奇怪的日期格式,從接口中返回的日期是這樣的,如 2018-02-06T11:59:2208:00 。然而這卻不是我們想要的,我們要的是這種,YYYY-MM-DD HH:mm:ss。那么這種是怎么轉換的呢?這時候就可以使用一款很好用的日…

并發模式:生產者和消費者

在我15年的職業生涯中,生產者和消費者的問題是我僅遇到過幾次。 在大多數編程情況下,我們正在做的事情是以同步方式執行功能,其中JVM或Web容器自行處理多線程的復雜性。 但是,在編寫某些需要的用例時。 上周,我遇到了一…

POJ 1006 - Biorhythms (中國剩余定理)

B - BiorhythmsTime Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1006Description 人生來就有三個生理周期,分別為體力、感情和智力周期,它們的周期長度為23天、28天和33天。每一個周期中…

子線程中更新UI線程的三個方法

1、通過handler方式,sendmessage。 多個類間傳遞比較麻煩,也懶的寫... 2、線程中通過runOnUiThread() new Thread() { public void run() { //這兒是耗時操作,完成之后更新UI; runOnUiThread(new Runnab…

mysql limit acs_mysql查詢操作

簡單查詢&#xff1a;select * from 表名;避免重復&#xff1a;select distinct 字段 from 表名;條件查詢&#xff1a;select 字段,字段 from 表名 where id<5(條件);四則運算查詢&#xff1a;select id,dep_id,id*dep_id from company.employee5 where id<5;定義顯示格式…