日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java runtime 异常_Java中RuntimeException和Exception

發(fā)布時(shí)間:2023/12/1 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java runtime 异常_Java中RuntimeException和Exception 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

簡(jiǎn)單的說(shuō),非RuntimeException必要自己寫(xiě)catch塊處理掉。

RuntimeException不用try catch捕捉將會(huì)導(dǎo)致程序運(yùn)行中斷,若用則不會(huì)中斷

1.RuntimeException

今天摩根IT電面的時(shí)候被問(wèn)到Exception和RuntimeException的區(qū)別,當(dāng)時(shí)答不出來(lái),大囧,晚上來(lái)學(xué)習(xí)一下。

首先看一段代碼,主要內(nèi)容就是將字符串類型的數(shù)字轉(zhuǎn)化為整型的數(shù)字,然后讓兩個(gè)數(shù)字相乘,代碼如下:

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);

}

}

產(chǎn)看parseInt方法的源代碼如下:

public static int parseInt(String s) throws NumberFormatException {

return parseInt(s,10);

}

我們發(fā)現(xiàn)這個(gè)方法中拋出了NumberFormatException異常,但是在上面的代碼中我們沒(méi)有找到try...catch來(lái)處理,這是為什么呢。按照我們異常處理的知識(shí),如果一個(gè)方法通過(guò)throws拋出了異常,那么可以在拋出異常的方法中不適用try...catch,但是在調(diào)用這個(gè)方法的地方必須有try...catch來(lái)處理。

下面來(lái)觀察NumberFormatException類的繼承關(guān)系:

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

Exception:在程序中必須使用try...catch進(jìn)行處理。

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

對(duì)于RuntimeException的子類最好也使用異常處理機(jī)制。雖然RuntimeException的異??梢圆皇褂胻ry...catch進(jìn)行處理,但是如果一旦發(fā)生異常,則肯定會(huì)導(dǎo)致程序中斷執(zhí)行,所以,為了保證程序再出錯(cuò)后依然可以執(zhí)行,在開(kāi)發(fā)代碼時(shí)最好使用try...catch的異常處理機(jī)制進(jìn)行處理。

2.User Defined Exception

下面給出一個(gè)自定義異常的實(shí)例

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());

}

}

}

輸出結(jié)果為:

MyException: 自定義異常

常見(jiàn)的RuntimeException- -

RuntimeException是開(kāi)發(fā)中最容易遇到的,下面列舉一下常見(jiàn)的RuntimeException:

1、NullPointerException:見(jiàn)的最多了,其實(shí)很簡(jiǎn)單,一般都是在null對(duì)象上調(diào)用方法了。

String s=null;

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

這里你看的非常明白了,為什么一到程序中就暈?zāi)?#xff1f;

public int getNumber(String str){

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

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

}

這個(gè)方法就有可能拋出NullPointerException,我建議你主動(dòng)拋出異常,因?yàn)榇a一多,你可能又暈了。

public int getNumber(String str){

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

//你是否覺(jué)得明白多了

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

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

}

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

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

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

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

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

7、ArithmeticException:算術(shù)錯(cuò)誤,典型的就是0作為除數(shù)的時(shí)候。

8、IllegalArgumentException:非法參數(shù),在把字符串轉(zhuǎn)換成數(shù)字的時(shí)候經(jīng)常出現(xiàn)的一個(gè)異常,我們可以在自己的程序中好好利用這個(gè)異常。

總結(jié)

以上是生活随笔為你收集整理的java runtime 异常_Java中RuntimeException和Exception的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。