java 中的异常处理
在java中错误分为俩大类:Error和Exception 这两个类都是继承自Throwable
Error :错误,无法通过异常处理解决,例如栈溢出
Exception:异常 ,可以通过技术手段解决
我们说的异常处理,指的时通过代码解决Exception对象
Exception中分为运行异常和检查性(编译性)异常
运行时异常是指编译期间没有问题,在运行时产生异常
检查异常是指编译期发生异常
大多数我们解决的都是检查性异常
处理方案
1. try ...... catch :立即处理异常
2.在方法声明处通过throws关键字声明该方法中可能会产生的异常类型
3.在方法体中,通过throw抛出异常
方案 2和3是延时处理,那块调用该方法,就在那块处理
try {
int a = 10 / 0;
System.out.println(array[10]);
//try中某一行代码发生异常就不再继续执行,而去执行对应的catch
System.out.println("try中第二行代码");
}catch(ArrayIndexOutOfBoundsException e) {
//catch中的参数就是捕获的异常
//我们在catch块中处理异常
System.out.println("发生数组越界抛出的异常");
}catch(ArithmeticException e) {
System.out.println("发生算数异常");
}
如果上面的catch捕获到异常,那么系统认为异常被处理了可以继续向下执行
如果没有捕获到或者没有使用try...catch发生异常就不能继续执行
final一般都是在最终块中做扫尾工作。例如关闭链接,存储控制
finally {
//一般都是在最终块中做扫尾工作。例如关闭链接,存储控制
System.out.println("无论有没有异常都能继续执行");
}
声明异常:并没有处理异常,只是告知调用者方法中可能会发生异常,可以声明多个异常
如果声明的都是运行时异常,那么调用时,可以不用处理;如果声明的异常中有检查性异常,调用时必须处理
当我们根据不同的环境要对异常进行不同的方式来处理,此时由于不能统一处理
我们就只声明异常,在调用的地方通过try..catch进行不同的处理
public static void test() throws ArithmeticException,Exception{
int a = 10 / 0;
}
public static void test2(String s) throws Exception{
if(s == null) {
//抛出异常对象 当方法执行到该行代码,底下的代码就不再执行
// throw new NullPointerException();
throw new Exception("发生异常");
}
System.out.println("s不是null");
}
}



