Java笔记 异常篇
在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。
在API中,Exception 类及其子类是 Throwable 的一种形式,它用来表示java程序中可能会产生的异常,并要求对产生的异常进行合理的异常处理。
异常处理方式
throws
会抛出异常的代码必须要用throws声明它有可能这么做。
public int getArray(int[] arr) throws Exception {
if( arr == null){
throw new Exception("数组不存在");
}
}
- 当方法遇见异常,将异常抛给方法调用方;
- 方法调用方如果没有异常处理程序,则将异常抛给JVM;
- JVM打印出异常相关信息:异常类的类名,异常出现的所在方法,异常所出现的代码位置等;
- 结束程序。
public static void main(String[] args) throws Exception {
int[] arr = null;
int i = getArray(arr);
System.out.println(i);
}
public static int getArray(int[] arr) throws Exception {
//对方法参数进行合法性的判断,进行判断是不是null
if( arr == null){
//抛出异常的形式,告诉调用者
//关键字 throw
throw new Exception("数组不存在");
}
}
try…catch
- tr检测异常,将异常抛给catch;
- catch捕获异常,处理异常;
- 程序继续。
try{
//危险动作
}catch(Exception ex){
//处理异常
}
try{
//危险动作
}catch(Exception ex){
//处理异常
}finally{
//此部分程序无论有无异常都必须执行,常用于释放内存
}
对于多catch情况,平级异常(互相无继承关系)无先后顺序要求,有继承关系的异常需要将子类放在前,父类放在后。
try{
}catch(NullPointerException ex){
}
catch(Exception ex){
}
运行异常
运行异常是指RuntimeException及其子类。
运行异常不需要用throws抛出异常,因为当出现运行异常,建议直接修改代码。
子类重写父类方法时的异常处理
1.如果父类的方法抛出异常,子类重写该方法可以不抛出异常,也可以抛出异常。但是,如果子类抛出异常,其继承关系不能大于父类的异常,即子类抛出的异常类型只可以跟父类一样或者为其子类。
2.如果父类的方法没有异常抛出,子类重写后也不能抛出异常。如果子类的重写方法中调用了抛出异常的方法,只能用try...catch处理。
class Fu{
public void function(){
}
}
class Zi extends Fu{
public void function(){
try {
method();
} catch (Exception e) {
e.printStackTrace();//列出有用信息
}
}
public void method()throws Exception{
}
}
自定义异常
继承Exception或者RuntimeException。
public class XxxException extends Exception{
public XxxException(String s){
super(s);
}
public XxxException(){}
}