1. 程式人生 > >第2章 Throwable常用方法&自定義異常

第2章 Throwable常用方法&自定義異常

Java

1.1 Throwable常用方法
String getMessage() 返回此 throwable 的詳細消息字符串
String toString() 返回此 throwable 的簡短描述
void printStackTrace() 打印異常的堆棧的跟蹤信息
1.1.1 案例代碼六:

package com.itheima_01;
/*
 * Throwable的常用方法:
String getMessage() 
String toString() 
void printStackTrace() 
 *
 */
public class ExceptionDemo4 {
public static void main(String[] args) {
try {
System.out.println(2 / 0);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private static void method() {
try {
System.out.println(2 / 0);
} catch(ArithmeticException e) {
//String getMessage() : 原因
//System.out.println(e.getMessage());
//String toString()  類型和原因
//System.out.println(e.toString());

//void printStackTrace():類型原因和位置
e.printStackTrace();
}
//System.out.println("hello");
}
}

1.2 finally的概述和應用場景

finally使用格式:
try{
}catch(異常類型 異常變量){
}finally{
   //釋放資源的代碼
}

1.2.1 案例代碼七:

 package com.itheima_01;
import java.io.FileWriter;
import java.io.IOException;

/*
 *  finally:組合try...catch使用,用於釋放資源等收尾工作,無論try...catch語句如何執行,finally的代碼一定會執行
 * 
 *  try {
 *          有可能出現問題的代碼;
 * 
 *  } catch(異常對象) {
 *          處理異常;
 *  } finally {
 *          釋放資源;
 *          清理垃圾;
 *  }
 * 
 */
public class ExceptionDemo5 {
public static void main(String[] args) {
//method();
FileWriter fw = null;
try {
System.out.println(2 / 0);
fw = new FileWriter("a.txt");
fw.write("hello");
fw.write("world");
//System.out.println(2 / 0);
fw.write("java");
//fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//釋放資源
try {
if(fw != null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

private static void method() {
try {
System.out.println(2 / 1);
} catch(ArithmeticException e) {
System.out.println("除數不能為0");
} finally {
System.out.println("清理垃圾");
}
}

}

1.3 編譯時異常&運行時異常
A: 編譯時期異常:是Exception的子類,非RuntimeExcpetion的子類,在編譯時期必須處理
B:RuntimeException和他的所有子類異常,都屬於運行時期異常。NullPointerException,ArrayIndexOutOfBoundsException等都屬於運行時期異常.
運行時期異常的特點:
方法中拋出運行時期異常,方法定義中無需throws聲明,調用者也無需處理此異常
運行時期異常一旦發生,需要程序人員修改源代碼.
1.3.1 案例代碼八:

package com.itheima_01;

import java.io.FileWriter;
import java.io.IOException;

/*
 * 異常的分類:
運行時期異常:RuntimeException的子類就是運行時期異常,在編譯時期可以自由選擇處理或者不處理
編譯時期異常:是Exception的子類,非RuntimeExcpetion的子類,在編譯時期必須處理

 */
public class ExceptionDemo6 {
public static void main(String[] args) {
//System.out.println(2 / 0);
//String s = null;
//System.out.println(s.length());
try {
FileWriter fw = new FileWriter("a.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

1.4 自定義異常
需求:寫一個方法,接受考試成績,如果考試成績的範圍在0-100之間則屬於正常,否則屬於異常
1.4.1 案例代碼九:
當成績不在0~100範圍內,拋出一個運行時異常或者編譯時異常,阻止程序繼續向下執行

     package com.itheima_01;
/*
 * 需求:寫一個方法,接受考試成績,如果考試成績的範圍在0-100之間則屬於正常,否則屬於異常
 *
 * throws:處理異常的一種方式,把異常拋出,由調用者來處理
 * throw:制造異常的方式,並且結束方法
 *
 * 註意:如果拋出(throw)的是編譯時期異常,必須在方法聲明處拋出(throws)
 *
 * 如何自定義一個異常類呢?
 * 非常簡單,寫一個類去繼承Exception或者RuntimeException,然後實現多個構造即可
 *
 *  */
public class ExceptionDemo7 {
public static void main(String[] args) {
/*boolean flag = checkScore(-10);
System.out.println(flag);*/
try {
checkScore(110);
} catch (Exception e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//checkScore(110);
}
/*        public static boolean checkScore(int score) {
//判斷考試成績是否符合範圍,如果不符合則返回false
if(score < 0 || score > 100) {
return false;
}
//符合
return true;
}*/
public static void checkScore(int score) throws Exception {
if(score < 0 || score > 100) {
throw new RuntimeException("考試成績不符合要求");
//throw new Exception("考試成績不符合要求");
}
System.out.println("考試成績符合要求");
}
}

1.4.2 案例代碼十:
我們也可以自定義一個編譯時異常或者運行時異常來拋出:

 package com.itheima_01;

public class MyException extends /*RuntimeException*/ Exception{

public MyException() {
super();
// TODO Auto-generated constructor stub
}

public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
/*public MyException() {
super();
}
public MyException(String s) {
super(s);
}*/
}
package com.itheima_01;
/*
 * 需求:寫一個方法,接受考試成績,如果考試成績的範圍在0-100之間則屬於正常,否則屬於異常
 *
 * throws:處理異常的一種方式,把異常拋出,由調用者來處理
 * throw:制造異常的方式,並且結束方法
 *
 * 註意:如果拋出(throw)的是編譯時期異常,必須在方法聲明處拋出(throws)
 *
 * 如何自定義一個異常類呢?
 * 非常簡單,寫一個類去繼承Exception或者RuntimeException,然後實現多個構造即可
 *
 *  */
public class ExceptionDemo7 {
public static void main(String[] args) {
/*boolean flag = checkScore(-10);
System.out.println(flag);*/
try {
checkScore(110);
} catch (Exception e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//checkScore(110);
}

第2章 Throwable常用方法&自定義異常