异常处理
异常
异常的体系结构
* java.lang.Throwable
* |-----java.lang.Error:一般不编写针对性的代码进行处理。
* |-----java.lang.Exception:可以进行异常的处理
* |------编译时异常(checked)
* |-----IOException
* |-----FileNotFoundException
* |-----ClassNotFoundException
* |------运行时异常(unchecked,RuntimeException)
* |-----NullPointerException
* |-----ArrayIndexOutOfBoundsException
* |-----ClassCastException
* |-----NumberFormatException
* |-----InputMismatchException
* |-----ArithmeticException
异常的处理
异常处理方式一:try-catch-finally
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
}catch(异常类型2 变量名2){
//处理异常的方式2
}catch(异常类型3 变量名3){
//处理异常的方式3
}
....
finally{
//一定会执行的代码
}
注意
1、catch中的异常类型如 果没子父类关系,则谁声明在上,谁声明在下无所谓
catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错2、常用的异常对象处理的方式: ① String getMessage() ② printStackTrace()
3、在try结构中声明的变量,再出了try结构以后,就不能再被调用
异常处理方式二:throws + 异常类型&&手动抛异常
class Student{
private int id;
public void regist(int id) throws Exception {
if(id > 0){
this.id = id;
}else{
//手动抛出异常对象
// throw new RuntimeException("您输入的数据非法!");
// throw new Exception("您输入的数据非法!");
throw new MyException("不能输入负数");
}
}
}
1、“throws + 异常类型” 写在方法的声明处。指明此方法执行时,可能会抛出的异常类型,一旦当方法体执行时,出现异常,仍会在 异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不再执行!
2、throw 表示手动抛出一个异常类的对象
3、throws的方式只是将异常抛给了方法的调用者。并没真正将异常处理掉
4、如果父类中被重写的方法没throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中异常,必 须使用try-catch-finally方式处理
5、子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
throw 和 throws区别:
throw 表示抛出一个异常类的对象,生成异常对象的过程,声明在方法体内
throws 属于异常处理的一种方式,声明在方法的声明处
自定义异常
如何自定义异常类?
-
- 继承于现的异常结构:RuntimeException 、Exception
-
- 提供全局常量:serialVersionUID
-
- 提供重载的构造器
public class MyException extends Exception{ static final long serialVersionUID = -7034897193246939L; public MyException(){} public MyException(String message){ super(message); } }