Java异常

2

Java异常

  异常是指程序在执行过程中出现的非正常情况,最终导致JVM非正常停止。在Java语言中,异常的产生就是创建异常对象并抛出了一个异常对象,依次向上寻找是否有处理逻辑,如果到main方法仍然没有try…catch语句,则会继续抛出给JVM处理,JVM收到后会将异常信息以红色字体打印在控制台,并且终止程序。

throw/throws关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package demo01;

import java.io.FileNotFoundException;

public class ExceptionClass {
//throws是异常处理的第一种方式,交给其他人处理。注意throws关键字必须写在方法声明处,throws关键字后声明的异常必须是Exception或子类,如果内部抛出了多个对象,则必须也声明多个异常,如果抛出的异常有子父类关系,则直接抛出父类异常即可。
public static void main(String[] args) throws FileNotFoundException {
test();
}

public static void test() throws FileNotFoundException {
//可以使用throw关键字在指定的方法中抛出指定的异常,注意throw关键字抛出的异常必须是Exception的子类对象,如果是RuntimeException或子类,我们可以不处理,如果是编译异常,则必须处理,要不继续throws,要不try...catch处理
throw new FileNotFoundException("没有找到文件异常!");
}
}

1

try…catch关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package demo01;

public class ExceptionClass {
public static void main(String[] args) {
System.out.println("测试try...catch语句");
System.out.println("--------------------");
System.out.println(test1(10, 2));
System.out.println(test1(10, 0));
System.out.println("测试try...catch...finally语句");
System.out.println("--------------------");
System.out.println(test2(10, 2));
System.out.println(test2(10, 0));
}

//在try...catch语句中,可能会抛出多个异常,那么就可以使用多个catch进行捕获。
//如果try中产生了异常,则会执行catch中的语句,执行完毕后执行try...catch语句后的代码;如果try中没有产生异常,则会执行完try中的语句,然后继续执行try...catch语句后的代码。
//如果有多个异常时,有三种解决方案,可以写多个try...catch语句进行分别处理,也可以写一个try语句,多个catch语句,但是子类异常的catch要写在前面,或者写一个try语句一个catch语句,在catch语句中写所有异常的父类,即可一次性抛出所有异常。
public static int test1(int a, int b){
int res;
try {
res = a / b;
System.out.println("执行try之后的语句");
}catch (ArithmeticException e) {
res = 0;
System.out.println("执行catch之后的语句");
}
System.out.println("执行try...catch之后的语句");
return res;
}

//在try...catch...finally语句中,finally中的语句无论异常是否出现都会执行,常常用于资源回收和释放。
public static int test2(int a, int b){
int res;
try {
res = a / b;
System.out.println("执行try之后的语句");
}catch (ArithmeticException e) {
res = 0;
System.out.println("执行catch之后的语句");
}finally {
System.out.println("执行finally之后的语句");
}
System.out.println("执行try...catch之后的语句");
return res;
}
}

1

自定义异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package demo01;

//自定义异常类必须继承Exception或RuntimeException
//继承Exception:则自定义异常是编译期异常,如果抛出异常则必须处理。
public class MyException1 extends Exception {
public MyException1(String message) {
super(message);
}
}

package demo01;

//继承RuntimeException:则自定义异常是运行期异常,无需处理,交给JVM也可。
public class MyException2 extends RuntimeException {
public MyException2(String message) {
super(message);
}
}

package demo01;

public class ExceptionClass {
public static void main(String[] args) throws MyException1 {
try{
test1();
test2();
}catch (Exception e){
System.out.println("我解决了继承Exception类的异常");
System.out.println("我解决了继承RuntimeException类的异常");
}
}

public static void test1() throws MyException1 {
throw new MyException1("这是一个继承Exception类的异常");
}

public static void test2() {
throw new MyException2("这是一个继承RuntimeException类的异常");
}
}

1

Java小结

  红色的异常语句是每一个程序员都遇到过的,在这里我们对异常进行了揭秘,可能在平时的做题或者工程中很难用到,我们还是要了解它的机制,当我们需要的时候可以及时回忆起来。

-------------本文结束感谢您的阅读-------------
0%