Java异常信息
Java异常处理
什么是异常?
程序运行时可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。
捕捉异常
Java语言的异常捕获结构由:try、catch 和 finally 3部分组成。
try 语句块存放可能发生异常的Java语句
;
catch 程序块在 try 语句块之后,用来激发被捕获的异常;
finally 语句块是异常处理的最后执行部分,是必须执行
的语句块。
语法:
try {//程序代码块} catch (Exception1 e1) {//对 Exception1的处理} catch (Exception2 e2) {//对 Exception2的处理} finally {//必须执行的程序}
通过语法可知,异常处理器大致分为 try - catch
语句块 和 finally
语句块。
1、try - catch 语句块
示例代码:
public static void main(String[] args) {try {String str = "刘亦菲";System.out.println("名字是:" + str);int age = Integer.parseInt("20L");System.out.println(age);} catch (Exception e) {e.printStackTrace();}System.out.println("程序结束");}
如下图所示,程序仍然输出了最后的提示信息,没有因为异常而终止程序。
通常,异常处理常用下面三个函数来获取异常信息:
- e.printStackTrace():指出异常类型、性质、栈层次以及出现在程序中的位置
- e.getMessage():输出错误性质
- e.toString():给出异常的类型与性质
2、finally 语句块
finally 语句块是必须执行
的。但是也有4种特殊情况不能执行:
- finally 语句块中出现异常
- 程序所在线程死亡
- 关闭 CPU
- 在前面的代码使用了
System.exit()
退出程序
Java 常见的异常
自定义异常
用户可以通过继承 Exception
类进行自定义异常。
自定义异常步骤:
- 创建自定义异常类
- 方法中 throw 抛出异常对象
- 如果在抛出异常的方法中处理异常,通过 try - catch 语句块捕获并且处理;否则在方法的声明处通过 throws 关键字 声明要抛出的异常,并进行下一步操作
- 调用出现异常的方法时捕获异常
示例:
public class MyException extends Exception{ // 创建自定义异常,继承 Exception 父类public MyException(String errorMessage){ // 构造方法super(errorMessage); // 父类构造方法}
}
创建类,并且使用自定义异常
public class Tran {static int sum(int num1, int num2) throws MyException {if (num1 < 0 || num2 < 0) {throw new MyException("不可以使用负数");}if (num1 > 100 || num2 > 100) {throw new MyException("数字太大");}return num1 + num2;}public static void main(String[] args) {try {int result = sum(102,190);System.out.println(result);}catch (MyException e){System.out.println(e);}}
}
throws 和 throw
throws 关键字应用在声明方法时,表示此处可能抛出异常,多个异常使用逗号分开。
static int sum(int num1, int num2) throws MyException, FileNotFoundException,ArrayIndexOutOfBoundsException {}
throw 关键字通常用在方法体
中,表示抛出一个异常对象。程序执行到 throw 立即停止,后面的语句不执行
。
注意: catch 语句顺序
代码示例:
public class Tran {static int chuFa(int num1, int num2) throws MyException {if (num2 < 0) {throw new MyException("除数不可以使用负数");}return num1 / num2;}public static void main(String[] args) {try {int result = chuFa(102, -1);System.out.println(result);} catch (MyException e) {System.out.println(e);} catch (ArithmeticException e) {System.out.println(e);} catch (Exception e) {System.out.println(e);}}
}
如上述代码,连续三次 catch,但是因为 Exception 是异常类的顶级父类,如果将它放在首位,那么后面的代码块将永远不能执行,所以必须放在最后。