什么是异常?
不正常的,会影响程序的正常执行流程。
例如下面的程序
public static void main(String[] args) { TestDemo1 t = new TestDemo1(); t.a(); System.out.println("其它程序代码"); } public void a() { b(); } public void b() { int x =5; int y = 0; int z = x / y; System.out.println("结果是:"+z); }
Error:错误
JVM自身的错误,程序员不能处理。
Exception:异常
受检异常(非运行时异常)
程序员必须进行异常处理,否则编译通不过
运行时异常
程序员可以不做处理。改代码。
也可以处理,处理了程序可以不中断。
Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw和throws。
可以添加多个catch
public void method() { try { //代码段(此处可能会产生异常) }catch(异常类型 ex) { //对异常进行处理的代码段 } //代码段 }
try...catch三种情况
2.异常类型匹配,可以处理,程序不会中断,执行catch块,其他代码正常执行
3.异常类型不匹配,程序中断,不执行catch块
public void method() { try { //代码段(此处可能会产生异常) }catch(异常类型 ex1) { //对异常进行处理的代码段 }catch(异常类型 ex2) { //对异常进行处理的代码段 } //代码段 }
多重catch块的好处
对不同的异常,进行不同的处理
但是,遵循规则:
2.先普通后特殊。
保证一些资源释放的代码一定会执行
public void method() { try { //代码段(此处可能会产生异常) }catch(异常类型 ex1) { //对异常进行处理的代码段 }catch(异常类型 ex2) { //对异常进行处理的代码段 }finally{ //此代码块一定会执行,无论是否引发异常 System.out.println("此代码块一定会执行"); } //代码段 }
1 public class TestException2 { 2 3 public void showArr() { 4 Scanner input = new Scanner(System.in); 5 int [] arr = new int[5]; 6 System.out.println("赋值:"); 7 try { 8 for(int i = 0; i < arr.length; i++) { 9 arr[i] = input.nextInt(); 10 } 11 Arrays.stream(arr).forEach(System.out::println); 12 } catch (InputMismatchException e) { 13 System.out.println("赋值出错了"); 14 e.printStackTrace(); 15 } catch (ArrayIndexOutOfBoundsException e) { 16 System.out.println("赋值出错了"); 17 e.printStackTrace(); 18 } catch (Exception e) { 19 System.out.println("赋值出错了"); 20 e.printStackTrace(); 21 } finally { 22 input.close();//释放资源 23 System.out.println("程序运行结束"); 24 } 25 } 26 public static void main(String[] args) { 27 new TestException2().showArr(); 28 29 } 30 31 }