处理异常的两种方式:
try...catch....finally
throw //抛出
try{
可能出现问题的代码;
}catch(异常名 变量){
针对问题的处理;
} finally{
释放资源;
}
变形格式:
try{
可能出现问题的地方
}catch(异常名 变量){
针对问题的处理
}
注意:
**异常名可以先运行一次,让虚拟机报错借此告诉你这个异常叫什么**
A:try 里面的代码越少越好
B:catch里面必须有内容,哪怕只是一个提示
A:当一个异常的时候
B:当两个异常的时候:每个异常都try...catch
try...catch....catch
注意:一旦try里面出现问题,就会在这里把问题抛出并和catch里面的问题匹配,有匹配就执行catch里面的语句,然后结束try...catch,继续执行下去。(try里面,出问题的语句之后的语句都不再执行)
throw的方式处理异常
有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限区处理某个异常。
或者说,我处理不了,就不处理了
为了解决问题,Java针对这种情况,就提供了另一种方法:抛出
注意:尽量不要再main方法上抛出异常
如果出现了异常情况,我们可以把异常抛出,抛出的应该是异常的对象
例如 throw new ArithmeticException();
原则:
如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throw
区别:
后续程序需要运行,就用try,否则就用throw
finally特点
finally:被finally控制的语句一定会执行
注意:如果在执行到finally之前jvm退出了,,finally就不能执行了,如System.exit();
自定义异常
自定义的异常,是为了弥补java中考虑不到的异常,我们需要自定义异常
我们的自定义异常,必须用如下两个方式其中之一
A:继承Exception
B:继承RuntimeException
例如:
我现在要自定义一个异常,我输入的数字必须在0-100之前,否则报错
public class MyException extends Exception{
public MyException(){} //空参构造器
public MyException(){ //带参构造器,参数是错误的具体信息
super(message);
}
}
当我调用测试类的时候,判断输入值是否在范围之内,如果超出范围,则执行:throw new MyException("超出设定范围"); //这个参数就是错误详细说明
throw抛出的是异常的对象