异常
-
错误 :比如程序运行时系统内部错误或者资源耗尽, 这种错误是不能通过修改代码来恢复 的
-
异常
- 运行时异常
- 往往是程序员的编程错误引起的,java编译器不会对这种异常进行检查,运行过后会报错
- 常见的运行时异常
- 算数异常(除0 等)
- 数组下标越界
- 空指针异常
- 非运行时异常 (编译异常)
- 最直白的表现就是你不抛出异常或者try-catch捕获,程序无法通过编译
- 常见的编译异常
- FileNotFoundException
- ClassNotFoundException
- IOException
- 运行时异常
-
异常处理机制
-
抛出异常
- 就在方法上throws 异常类型
-
try - catch - finally 捕获
- 只要你写了finally, 就会运行finally 代码块
- catch 可以捕获多种异常类型,但是子类异常必须放在父类异常类型
- 运行机制
- 顺序执行,首先走try语句,如果里面有异常,且能够被捕获,就会走捕获到的异常代码块。try语句块中剩下的语句不会执行。然后就是return 并不会马上返回,而是先将结果存储起来,执行后面的代码,所以说,如果finally子句中有return,必定是返回finally中的返回值。最后是finally子句,其中的代码必定会执行。
-
自定义异常
package com.company; import java.io.*; import java.util.Scanner; public class Test { public static void main(String[] args) throws ArithmeticException { try{ test(); } catch (TestException e) { e.printStackTrace(); } } // 2、抛出 public static int test() throws TestException { int a = 3; int b = 0; if(b == 0) { throw (new TestException("除数不能为0")); } a = a / b; return a; } } // 1、首先自定义异常 class TestException extends Exception { public TestException() { super(); } public TestException(String message) { super(message); } }
结果输出:
-