Java异常的处理 try-catch-finally
目录
- 什么是异常
- 通过if-else处理异常
- 用if-else堵漏洞的缺点
- try-catch
- 例
- 第一种处理
- 第二种处理
- 第三种处理
- 第四种处理
- try-catch-finally
- 例
- System.exit(0);//终止当前的虚拟机执行
什么是异常
Exception
:在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,我们称之为发生异常。
import java.util.Scanner;
public class Except01 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
//实现一个功能:键盘输入两个数,求商:
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
System.out.println("商:"+num1/num2);
}
}
通过if-else处理异常
import java.util.Scanner;
public class Except02 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
//实现一个功能:键盘输入两个数,求商:
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
if(sc.hasNextInt()){
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
if(sc.hasNextInt()){
int num2 = sc.nextInt();
if(num2 == 0){
System.out.println("对不起,除数不能为0");
}else{
System.out.println("商:"+num1/num2);
}
}else{
System.out.println("对不起,你输入的不是int类型的数据!");
}
}else{
System.out.println("对不起,你输入的不是int类型的数据!");
}
}
}
用if-else堵漏洞的缺点
- 代码臃肿,业务代码和处理异常的代码混在一起。
- 可读性差
- 程序员需要花费大量的经历来维护这个漏洞
- 程序员很难堵住所有的漏洞。
try-catch
在Java中,try-catch语句用于处理异常。当程序中可能出现异常时,可以使用try-catch语句来捕获并处理这些异常,以避免程序崩溃或出现不可预料的行为。
try-catch语句的基本语法如下:
try {
// 可能会抛出异常的代码块
} catch (ExceptionType1 e1) {
// 处理异常类型为ExceptionType1的代码块
} catch (ExceptionType2 e2) {
// 处理异常类型为ExceptionType2的代码块
}
在try代码块中,编写可能会抛出异常的代码。如果在try代码块中发生异常,控制流将转到相应的catch代码块。每个catch代码块处理一种特定的异常类型。如果没有找到匹配的catch代码块,则程序将终止。
例
import java.util.Scanner;
public class Except03 {
public static void main(String[] args) {
//实现一个功能:键盘输入两个数,求商:
try{
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
System.out.println("商:"+num1/num2);
}catch(Exception ex){
//第一种处理:什么都不写,什么都不做
//第二种处理:输出自定义异常信息
//System.out.println("对不起,你的代码有问题!");
//第三种处理:打印异常信息:
/*(1)调用toString方法,显示异常的类名(全限定路径)*/
/*System.out.println(ex);
System.out.println(ex.toString());*/
/*(2)显示异常描述信息对应的字符串,如果没有就显示null
System.out.println(ex.getMessage());*/
/*(3)显示异常的堆栈信息:将异常信息捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常*/
/* ex.printStackTrace();*/
//第四种处理:抛出异常:
throw ex;
}
System.out.println("----谢谢你使用计算器");
}
}
第一种处理
第二种处理
第三种处理
第四种处理
try-catch-finally
除了try-catch语句之外,还可以使用finally代码块来确保无论是否发生异常,都会执行某些操作。finally代码块的语法如下:
try {
// 可能会抛出异常的代码块
} catch (ExceptionType1 e1) {
// 处理异常类型为ExceptionType1的代码块
} catch (ExceptionType2 e2) {
// 处理异常类型为ExceptionType2的代码块
} finally {
// 无论是否发生异常都会执行的代码块
}
例
import java.util.Scanner;
public class Except04 {
public static void main(String[] args) {
//实现一个功能:键盘录入两个数,求商:
try{
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数:");
int num1 = sc.nextInt();
System.out.println("请录入第二个数:");
int num2 = sc.nextInt();
System.out.println("商:"+num1/num2);
System.exit(0);//终止当前的虚拟机执行
return;
}catch(ArithmeticException ex){
throw ex;
}finally {
System.out.println("----谢谢你使用计算器");
}
}
}
System.exit(0);//终止当前的虚拟机执行
它可以让finally中代码不执行