Java中的异常处理是通过五个关键字来实现的,即try(尝试),catch(捕捉),finally(最后),throw(抛,投)和throws。
一、使用try-catch-finally处理异常
把可能出现异常的代码放入try语句块中,并使用catch语句块捕获异常。
代码如下:
import java.util.InputMismatchException;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
try{
Scanner in = new Scanner(System.in);
System.out.println("请输入被除数");
int num1 = in.nextInt();
System.out.println("请输入除数");
int num2 = in.nextInt();
System.out.println(num1+"/"+num2+"="+num1/num2);
}catch (InputMismatchException e){
System.out.println("除数必须是整数");
}catch (ArithmeticException e){
System.out.println("除数不能为零");
}catch (Exception e){
System.out.println("未知异常");
}finally {
System.out.println("感谢使用");
}
}
}
1.若try语句块中所有语句正常执行完毕,那么catch语句块中的所有语句都将被忽略,finally语句块也会被执行。
2.若try语句块在执行过程中发生异常,并且这个异常与catch语句块中声明的异常类型匹配,那么try语句块中剩下的代码都将被忽略,而相应的catch语句块将会被执行。
3.若try语句块在执行过程中发生异常,无论这种异常能否被catch语句块捕获到,都将执行finally语句块中的代码。
4.即使catch语句块中存在return语句,finally语句块中的语句也会被执行。
5.finally语句块中的语句不执行的唯一情况是在异常处理代码中执行了System.exit(1); 退出Java虚拟机。
6.在使用多重catch语句块时,catch语句块的排列顺序必须是从子类到父类,最后一个一般都是Excrption类。
二、使用throws声明抛出异常
如果在一个方法体中抛出了异常,并希望调用者能够及时的捕获异常,Java语言中通过关键字throws声明某个方法可能抛出的各种异常以通知调用者。throws可以同时声明多个异常,之间用逗号隔开。
代码如下:
import java.util.InputMismatchException;
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
try {
divide();
}catch (InputMismatchException e){
System.out.println("除数必须是整数");
}catch (ArithmeticException e){
System.out.println("除数不能为零");
}catch (Exception e){
System.out.println("未知异常");
}finally {
System.out.println("感谢使用");
}
}
public static void divide() throws Exception {
Scanner in = new Scanner(System.in);
System.out.println("请输入被除数");
int num1 = in.nextInt();
System.out.println("请输入除数");
int num2 = in.nextInt();
System.out.println(num1+"/"+num2+"="+num1/num2);
}
}
三、使用throw抛出异常
除了系统自动抛出异常外,再编程过程中有些问题是系统无法自动发现并解决的,此时需要程序员而不是系统来自行抛出异常,把问题交给调用者去解决。
throw和throws的区别:
1.作用不同:throw用于程序员自行产生并抛出异常,throws用于声明该方法内抛出了异常。
2.使用的位置不同:throw位于方法内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
3.内容不同:throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个。