异常
Java.lang.Throwable
Error
Exception
—— 异常顶层父类RuntimeException
Error
:代表系统级别错误(属严重问题),系统一旦出现问题,sun公司就会把这些错误封装成Error对象,Error是给sun公司自己使用,不是提供给开发者使用。Exception
:异常,代表程序可能出现问题,我们通常会用Exception以及他地子类来封装程序出现的问题(异常)。运行时异常
:RuntimeException及其子类,编译阶段不会出现异常提醒。(如:NullPointerException、ArrayIndexOutOfBoundsException)编译时异常
:除去RuntimeException及其子类,其余异常都是编译时异常,是编译阶段就会出现的异常,不解决,程序就无法编译运行。作用
:
①JVM默认处理方式:
②手动处理方式(捕获异常):
//捕获异常 使用方式:
try{
可能出现异常的代码;
}catch(异常类型 变量名){
异常处理代码;
}
好处:可以让程序继续往下执行,不会停止。
Throwable成员方法:
public String getMessage()
:返回此throwable的详细信息字符串public String toString()
:返回此throwable的简单描述public void printStackTrace()
:把异常的错误信息输出在控制台注意:
|
符号分隔。
③抛出处理(抛出异常):
1)throws
:
//使用:
public void 方法名()throws 异常类名1,异常类名2...{
...
}
注意:
2)throw
:
//使用
public void 方法(){
throw new NullPointerException();
}
注意:
自定义异常
:
步骤:
①定义异常类
RuntimeException
,编译时异常需继承Exception
②写继承关系
③空参构造器
④带参构造器
//①异常类名后缀Exception
public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系
//③空参构造
public AgeOutOfBoundsException(){}
//④带参构造
public AgeOutOfBoundsException(String message){
super(message);
}
}
遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。
特性:finally块中的代码一定会被执行,除非JVM退出。
由于一定会被执行的特性,finally{}通常用作资源的释放。
//捕获异常 使用方式:
try{
可能出现异常的代码;
}catch(异常类型 变量名){
异常处理代码;
}finally{
//一定会被执行的代码
}
注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果