Java学习day05--异常处理
Java异常处理
所有异常的父类是Throwable类,其下两个直接的子类
----Error类,比较严重的的问题,合理的应用程序不应该试图捕获;
----Exception类,表示合理应用程序可能想要捕获的条件。该类又分为两种:
- RuntimeException类(运行时异常)
- 除RuntimeException以外的异常类(编译时异常)
打印异常信息的常用方法
e.getMessage()
:获取异常信息;e.toString()
:异常类名 + 异常信息e.printStackTrace()
:打印异常详细信息;【常用:在调试时】,这个不用嵌套在sout里面了。
常用异常类
ArithmeticException
算数异常,如除数为0NullPointerException
空指针ArrayIndexOutOfBoundsException
数组越界InputMismatchException
匹配异常,会出现在Scanner中,Scanner有一个bug,在catch中捕获后必须重新sc = new Scanner(System.in);
异常处理语句
try-catch-catch
捕获异常,后面可写多个catch,如:
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
注意:父类异常通常写在最后一个catch中,如Exception类写在最后表示实在是不知道会出现什么异常,用此类作接收。
-
try...catch....finally
捕获异常,finally里面的语句:
// 无论是否出现异常,都会被执行
// 通常用在try和catch中有"return"语句的情况。
// finally中的代码会保证在try或者catch的return之前被执行。 -
throw new 异常类名(参数);
主动抛出异常 -
throws
在方法上声明异常,其格式为:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
当子类重写父类方法时,throws方法总体遵循以下三条规则:
1).无论父类方法是否抛出异常,子类方法都可以:不抛出任何异常;
2).无论父类方法是否抛出异常,子类方法都可以:抛出任何的“运行时异常”;
3).无论父类方法是否抛出异常,子类方法可以抛出跟父类相同的“编译期异常(或者子类异常)”,不能抛出比父类更多的编译期异常。
throw和throws的区别:
1).throw:(抛出)
1).用在方法中;
2).throw后面是:new 异常对象();而且只能有一个;
3).表示:立即抛出一个异常对象给方法的调用处;
2).throws:(声明抛出)【常用】
1).用在方法的声明处;
2).throws后面是:“异常类名”,可以有多个。
3).表示:告诉JVM,此方法内部“可能会出现某种异常”,如果运行时,真的出现异常,JVM
- 自定义异常类
//自定义异常类,可以继承自任意的Exception类及其子类。
class AgeException extends RuntimeException{
public AgeException (String msg){
super(msg);
}
}