throws關鍵字
throws關鍵字主要在方法定義上使用,表示此方法中不進行異常的處理,而是交給被調用處處理。
例:使用throws
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //此方法不處理異常
return x/y;
}
}
public class Test4 {
public static void main(String args[]){
try{ //div()方法拋出異常,必須明確進行異常處理
System.out.println(MyMath.div(10,5));
}catch (Exception e){
e.printStackTrace();
}
}
}
//結果
//2
提示:主方法上也可以使用throws拋出。
例:在主方法上使用throws
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //此方法不處理異常
return x/y;
}
}
public class Test4 {
public static void main(String args[]) throws Exception{
//表示此異常產生後會直接通過主方法拋出,代碼中可以不強制使用異常處理
System.out.println(MyMath.div(10,0));
}
}
//結果
//Exception in thread "main" java.lang.ArithmeticException: / by zero
// at com.study.Demo.MyMath.div(Test4.java:5)
// at com.study.Demo.Test4.main(Test4.java:10)
throw關鍵字
throw關鍵字可以由用戶手工拋出一個實例化對象。
例:手工拋出異常
package com.study.Demo;
public class Test4 {
public static void main(String args[]){
try{
throw new Exception("自己定義的異常");
}catch (Exception e){
e.printStackTrace();
}
}
}
//結果
//java.lang.Exception: 自己定義的異常
// at com.study.Demo.Test4.main(Test4.java:11)
異常處理的標準格式
例:
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //出現異常要交給被調用處輸出
System.out.println("計算開始");
int result=0;
try{
result=x/y;
}catch (Exception e){
throw e; //向上拋
}finally {
System.out.println("計算結束");
}
return result;
}
}
public class Test3 {
public static void main(String args[]){
try {
System.out.println(MyMath.div(10,0)); //被調用處處理異常
}catch (Exception e){
e.printStackTrace();
}
}
}
RuntimeException類
RuntimeException類的特徵:
程序在編譯時不會強制性地要求用戶處理異常,用戶可以根據自己的需要有選擇地進行處理,但是如果沒有處理又發生了異常,將交由JVM默認處理。
例:
package com.study.Demo;
public class Test4 {
public static void main(String args[]){
int temp=Integer.parseInt("100");
System.out.println(temp);
}
}
//結果
//100
此代碼正常運行,但如出現異常,就交由JVM進行默認處理。
assert關鍵字
assert關鍵字的主要功能是進行斷言。斷言指的是程序執行到某行之後,其結果一定是預期的結果。
例:觀察斷言的使用
package com.study.Demo;
public class Test5 {
public static void main(String args[]){
int num=10;
//假設中間可能經過了20行代碼來操作num的內容,期望的內容應該是20
assert num==20:"num的內容不是20"; //進行斷言操作
System.out.println("num="+num);
}
}
//結果
//num=10
結果沒有出現異常,這是因爲Java默認情況下是不開啓斷言的。如果想要啓用斷言,需要以下這樣做:
1.打開相應的控制面板
2.輸入-ea
自定義異常
用戶自己開發的異常類。
如果要想實現自定義異常類,只需要繼承Exception或RuntimeException父類即可。
例:定義AddException
package com.study.Demo;
class AddException extends Exception{ //此異常類要強制處理
public AddException(String msg){
super(msg); //調用父類構造
}
}
public class Test5 {
public static void main(String args[]){
int num=20;
try{
if(num>10){ //出現了錯誤,應該產生異常
throw new AddException("數值傳遞的過大");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
//結果
//com.study.Demo.AddException: 數值傳遞的過大
// at com.study.Demo.Test5.main(Test5.java:13)