Java异常
目录异常分类
Exception是程序可以捕获并处理的异常,分为运行时异常和非运行时异常
- 运行时异常:RunTimeException及其子类表示JVM在运行期间可能出现的错误,编译器不会检查这类错误,并且不会要求处理。例如空对象的引用,索引越界等;
- 非运行时异常:编译器会检查的异常,如果程序中出现,必须进行处理(
try-catch
捕获或使用throws
抛出),否则编译不通过;
常见的异常
运行时异常
NullPointerException
空指针异常ArrayIndexOutOfBoundException
数组索引越界StringIndexOutOfBoundException
字符串越界ClassCastException
类型转换异常
编译时异常
IOException
FileNotFoundException
ClassNotFoundException
异常抓抛
- 异常抓取:
try-catch
和throws
- 异常抛出:程序运行时出现异常,JVM根据异常类型在异常代码处创建对应的异常类型的对象并抛出,并终止程序
异常处理
try-catch-finally
将可能出现异常的代码放入try{}
中,如果发生异常就会创建一个对应异常类对象,然后与catch
的异常类型匹配,匹配一致会被catch
捕获,然后运行catch{}
中的程序,catch
中常用的处理方式有getMessage()和printStackTrace
,最后跳出try-catch
;finally
代码中的代码无论是否有异常都会执行
throws
出现异常时,就会在异常代码处生成一个异常对象,满足throws
后会被抛出,之后的代码不执行。该方式用于向方法之上的层级抛出异常,由上一级来解决问题,最终抛给main方法(main可以将异常抛给Java虚拟机)
- 子类重写方法抛出的异常类型不大于父类被重写的方法抛出的异常类型;
- 被重写的方法没有
throws
抛出异常子类重写的方法也不能抛出异常;