Java异常

Java异常

【摘要】Java异常~

前言

hi~

异常定义

java异常[exception]定义:是一种“信号”传递机制
如:

1
2
3
4
5
6
7
int i = ...;
int j = ...;

if(i / j == ...) { //有可能会出现异常【除0异常】
//...
}
//...

一段代码中,如果存在“有可能”出现异常的代码,而你的程序中又没有针对它做出“处理”,则一旦出现异常,程序就有可能会异常结束,从而达不到你的预期。

会有哪些异常?

java的异常可以分为:A. 运行时异常,也叫未检查异常; B. 非运行时异常,也叫已检查异常;

运行时异常,也叫未检查异常

所有直接或间接继承于RuntimeException异常的类都叫未检查异常,有:
NullPointerException 空指针异常
ClassCastException 类型转换异常
ArrayIndexOutofBoundsException 下标越界异常

以上这类异常都有一个共性:都是在JVM内部造成的,而不是由外部环境引起的。所以,这种异常可以说是由程序员编码粗心造成的。
解决方案是:希望程序员编码谨慎,比如:对象使用之前做非空判断,….

非运行时异常,也叫已检查异常

它们直接或间接继承于Exception类,或者换句话说,只要不是RuntimeException的子类,就是已检查异常。
如:
IOException,SqlException,FileNotFoundException,NetException, …
以上这些异常也有一些共性,就是它们都是由JVM外部环境造成的,所以,对于此类异常,光编码谨慎是不够的,还有做出处理。

注:在java中,对异常还有更高层次的抽象,叫可抛出的,由java.lang.Throwable来表示。

1
2
3
4
5
java.lang.Throwable
\- java.lang.Error [错误] 无需处理它
\- java.lang.Exception [异常] 重视
\- RuntimeException 未检查异常
\- 直接继承或间继承于 Exception 的类

如何处理异常?

有如下两种处理方式A. 消极处理方式,B. 积极处理方式。

消极处理方式

利用 关键字 throws 把异常抛出。如:

1
2
3
4
5
6
7
8
9
10
11
12
public void ma() throws InterruptedException {
Scanner sc = new Scanner(System.in);
System.out.print("please enter int>");
//
int i = sc.nextInt(); //这个方法有可能会抛出异常的。
//但是,由于是未检查异常,所以,可以不用处理。

//...
Thread.sleep(1000); //这个方法也是有可能会抛出异常的.
//这个异常是已检查异常,所以,必需要做出处理
//...
}

积极处理方式

利用 try catch finally 语句块来处理这个语句块有多种不同的变种。如:

1
2
3
4
5
6
7
8
try {
//有可能出现异常的代码
...
} catch(异常类型 e) {
//...做日志,或者可以恢复...
} catch (异常类型 e) {
//...
}

还有:

1
2
3
4
5
6
7
8
9
10
try {
//有可能出现异常的代码
...

} catch(异常类型 e) {
//...做日志,或者可以恢复...
} finally {
//... 一般做释放资源
}
//....

注:不管try块中的代码是否出现了异常,finally块总会执行,除非在try块中执行了 System.exit(1) //退出JVM 进程

还有:

1
2
3
4
5
6
try {
//....
...
} finally {
//...一般做释放资源
}

自定义异常类

自定义异常类是一般是自定义已检查异常。只需要定义一个类继承 java.lang.Exception 类即可,并且重写父类的构造方法。

如:

1
2
3
4
5
6
7
8
9
10
11
public class BalanceNotEnoughException extends Exception {
public BalanceNotEnoughException() { super(); }

public BalanceNotEnoughException(String msg) { super(msg); }

public BalanceNotEnoughException(Throwable cause) { super(cause); }

public BalanceNotEnoughException(String msg,Throable cause){
super(msg,cause);
}
}

#结束语
bye~

评论