Java异常学习笔记(二)

时间:2023-02-25 21:07:01

Java异常学习笔记----异常处理机制

上一篇 Java异常学习笔记(一) 下一篇 Java异常学习笔记(二)

Java异常处理分为两大方法

a. try...catch...finally方式

b. throws方式

下面将详细阐述这两种方式以及它们的区别。


try... catch...finally方式

try...catch...finally的代码结构

try
{
//可能出现异常的代码
}
catch(异常类名 异常名)
{
//异常处理
}
finally
{
//此处一般为了释放资源
}
try...catch...finally变种结构:

try...catch...可选finally

try{ //... }
catch{ //... }
try...mutil-catch... 可选finally

try{ //... }
catch{ //... }
...
catch{ //... }
try...finally

不适合编译时异常

try{ //... }
finally{ //... }

下面是API中一个示例代码:

class MyClass {
public static void main(String[] args) {
crunch(null);//60行
}
static void crunch(int[] a) {
mash(a);//64行
}
static void mash(int[] b) {
System.out.println(b[0]);//67行
}
}
根据出错信息,我们可以确定发生的是NullPointerException,继承自RuntimeException,属于运行时异常。

编译并不报错,运行出错(也说明这是运行时异常)。之后我们

Java异常学习笔记(二)

添加try...catch包围出错的位置:

public static void main(String[] args) {
try{
crunch(null);
}catch (NullPointerException e)
{
//这里进行处理
System.out.println("数组访问异常");
}

}

注意:

1. try中的代码应该尽量少:因为try中的代码块消耗更多的虚拟机资源。

2. catch中不能空白:cath中必须有清晰的异常处理代码,不然会掩盖程序的异常,使程序难以调试。

3.try不一定能执行完:try中的代码执行时,一旦遇到异常,便放弃执行后续代码,立即跳转进入catch异常处理。所以try只能捕获一个异常,即使代码中可能有多个异常会产生。

4.catch是有序的:在有多个catch时,JVM会将程序中实际抛出的异常与catch中的异常按顺序逐个比较。所以必须是低等级异常在前,父级异常在后,平级异常没有先后。


另一种方式在后面继续。