异常
:指的是程序在执行过程中,出现的非正常的情况,最终会导致
JVM
的非正常停止。
异常的根类是
java.lang.Throwable
,其下有两个子类:
java.lang.Error
与
java.lang.Exception
Error: 内存溢出,系统崩溃
Throwable
中的常用方法:
public void printStackTrace()
:
打印异常的详细信息。
包含了异常的类型
,
异常的原因
,
还包括异常出现的位置
,
在开发和调试阶段
,
都得使用
printStackTrace
。
public String getMessage()
:
获取发生异常的原因。
提示给用户的时候
,
就提示错误原因。
public String toString()
:
获取异常的类型和异常描述信息
(
不用
)
。
异常分类
异常
(Exception)
的分类
:
根据在编译时期还是运行时期去检查异常
编译时期异常
:checked
异常。在编译时期
,
就会检查
,
如果没有处理异常
,
则编译失败。
(
如日期格式化异常
)
运行时期异常
:runtime
异常。在运行时期
,
检查异常
.
在编译时期
,
运行异常不会编译器检测
(
不报错
)
。
(
如数学异
常
)
异常的处理
Java
异常处理的五个关键字:
try
、
catch
、
fifinally
、
throw
、
throws
Objects
非空判断
它由一些静态的实用方法组成,这些方法是
null-save
(空指针安全的)或null-tolerant
(容忍空指针的),那么在它的源码中,对对象为
null
的值进行了抛出异常操作。
public static <T> T requireNonNull(T obj)
:
查看指定引用对象不是
null
。
查看源码发现这里对为
null
的进行了抛出异常操作:
public static
<
T
>
T
requireNonNull
(
T obj
) {
if
(
obj
==
null
)
throw new
NullPointerException
();
return
obj
;
}
关键字
throws
运用于方法声明之上
,
用于表示当前方法不处理异常
,
而是提醒该方法的调用者来处理异常
(
抛出异常
).
Throwable
类中定义了一些查看方法
public String getMessage()
:
获取异常的描述信息
,
原因
(
提示给用户的时候
,
就提示错误原因。
public String toString()
:
获取异常的类型和异常描述信息
(
不用
)
。
public void printStackTrace()
:
打印异常的跟踪栈信息并输出到控制台。
什么时候的代码必须最终执行?
当我们在
try
语句块中打开了一些物理资源
(
磁盘文件
/
网络连接
/
数据库连接等
),
我们都得在使用完之后
,
最终关闭打开
的资源。
当只有在
try
或者
catch
中调用退出
JVM
的相关方法
,
此时
fifinally
才不会执行
,
否则
fifinally
永远会执行。
要求多个
catch
中的异常不能相同,并且若
catch
中的多个异常之间有子父类异
常的关系,那么子类异常要求在上面的
catch
处理,父类异常在下面的
catch
处理。
如果
fifinally
有
return
语句
,
永远返回
fifinally
中的结果
,
避免该情况
.
自定义异常
异常类如何定义
:
1.
自定义一个编译期异常
:
自定义类 并继承于
java.lang.Exception
。
2.
自定义一个运行时期的异常类
:
自定义类 并继承于
java.lang.RuntimeException
。