程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 面向對象的異常處理之深入理解java異常處理機制,深入理解異常處理

面向對象的異常處理之深入理解java異常處理機制,深入理解異常處理

編輯:JAVA綜合教程

面向對象的異常處理之深入理解java異常處理機制,深入理解異常處理


什麼是異常?

  異常是對問題的描述,將問題的對象進行封裝;
  異常體系的特點:異常體系中的所有類以及建立的對象;
  都具有可拋性,也就是說可以被throw和throws關鍵字所操作,只有異常體系具有該特點;
  throws定義在函數上,用於拋出異常類;throw定義在函數內,用於拋出異常對象,前者可以拋出多個,用逗號隔開。

代碼加注釋講解:

package demo1;
/*
* 有一個圓形和長方形*
* */
class NoValueException extends Exception{
NoValueException(String msg){
super(msg);
}
}
class NoValueExceptionT extends RuntimeException{
NoValueExceptionT(String msg){
super(msg);
}
}
interface Shape{
void getArea();
}
class Rec implements Shape
{
private int len,wid;
Rec(int len, int wid)//throws NoValueException
{
if (len<=0||wid<=0)
throw new NoValueExceptionT("矩形參數出現非法值");
this.len=len;
this.wid=wid;
}
public void getArea(){
System.out.println(len*wid);
}
}

class Circle implements Shape{

private int r;
Circle(int r) {
if (r<=0)
throw new RuntimeException("圓的參數出現非法值");//自定義異常,為了增強可讀性“NoValueExceptionT”
this.r = r;
}
public static final double PI=3.14;

public void getArea(){
System.out.println(Math.pow(r, 2)*PI);
}

}

public class test1 {

public static void main(String[] args) {
/*try {
Rec rec= new Rec(-4, 5);
rec.getArea();
} catch (NoValueException e) {
System.out.println(e.toString());
System.out.println(e.getMessage());
e.printStackTrace();
}*/


/* Rec rec= new Rec(4, 5);
rec.getArea();*/
Circle c=new Circle(-8);
c.getArea();
System.out.println("over");

}
/*
* 異常是對問題的描述,將問題的對象進行封裝
* 異常體系的特點:異常體系中的所有類以及建立的對象
* 都具有可拋性,也就是說可以被throw和throws關鍵字所操作
* 只有異常體系具有該特點
* throws定義在函數上,用於拋出異常類;throw定義在函數內,用於拋出異常對象,前者可以拋出多個,用逗號隔開*/

/*
* 當函數內容有throw拋出異常對象,並未進行try處理,必須要在函數上申明,否則編譯失敗
* pc: runtimeexcpetion除外。也就是,函數內如果拋出runtimeexcpetion異常
* 函數上可以不用申明。
*
* 如果函數申明了異常,調用者需要進行處理,處理方法可以用throws或try
*
* 異常有兩種:
* 1.編譯時異常
* 沒有拋出也沒有try,則編譯失敗;
* 該異常被標識,代表可以被處理。
* 2.運行時異常(編譯時不檢測)
* 在編譯時不需要處理,編譯器不檢查
* 該異常發生,建議不處理,讓程序停止,需要修正代碼。
* pc:多個catch,父類的catch放在最下面
* */


// 異常處理的三種模式
/*1.
try {
需要檢測的代碼塊
} catch (Exception e) {
需要處理的代碼塊
pc:當 System.exit(0);此時finally 代碼塊不執行,只有這種情況(面試題);
finally
}finally {
必需執行的代碼塊
常用於關閉資源
}
2.
try {

} catch () {

}

3.
try {

} finally {

}*/

/*自定義異常:
自定義類繼承Exception或runtimeException
1.為了讓自定義類具備可拋性;
2.讓該類具備操作異常的共性方法;
當要自定異常信息時,可以使用父類已經定義好的功能。
將異常信息傳遞給父類的構造函數。
優點:
1.按照java的面向對象的思想,將程序中出現的特有問題進行封裝;
2.將正常流程代碼和問題處理代碼相分離,方便閱讀。
*/
//如:
class NoValueException extends Exception{
NoValueException(String msg){
super(msg);
}
}
class NoValueExceptionT extends RuntimeException{
NoValueExceptionT(String msg){
super(msg);
}
}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved