Java 笔记分享 —— try - catch 块

目录

1.1 前言

1.2 使用 try - catch 块和不使用 try - catch 块的区别

1.3 try 块

1.4 catch 块

1.5 多重 catch 块

1.6 嵌套 try - catch 块

1.7 finally 块

1.8 总结


1.1 前言

try - catch 块是在异常机制中用来捕获异常的。为什么要捕获异常,原因很简单,当我们在做项目的时候,代码量很多甚至是非常庞大,使用 try - catch 块方便我们快速定位出现异常的代码,方便快速调试。曾经的我对它不以为然,后来就真香。

1.2 使用 try - catch 块和不使用 try - catch 块的区别

使用 try - catch 块的简单示例

public class Test1 {
    public static void main(String args[]) {
        try {
            // 出现异常,不能除以 0
            int data = 50 / 0;
        }
        catch (ArithmeticException e) {
            // 打印异常
            System.out.println(e);
        }

        System.out.println("看得到这段文字,说明异常外的代码可运行");
    }
}

不使用 try - catch 块的简单示例

​public class Test1 {
    public static void main(String args[]) {
        // 出现异常,不能除以 0
        int data = 50 / 0;

        System.out.println("看得到这段文字,说明异常外的代码可运行");
    }
}

​

使用 try - catch 块示例的运行结果

运行结果:
    java.lang.ArithmeticException: / by zero
    看得到这段文字,说明异常外的代码可运行

不使用 try - catch 块的运行结果

运行结果:(报错)
    Exception in thread "main" java.lang.ArithmeticException: / by zero

可以发现代码中使用了 try - catch 块,当块中出现异常时,不在块中的代码还是可以运行的。而不使用 try - catch 块,一旦出现异常,异常后的代码是不会执行的。这样的话,如果后面的代码一多就很难确定是哪出问题了。

1.3 try 块

  • try 块用于封装可能引发异常的代码,也就是把可能会引发异常的代码放在 try 块中。它必须在方法内使用;
  •  
  • 不要将不会引发异常的代码放在 try 块中;
  • try 块之后必须是 catch 块或 finally 块;
  • try 块之后有一个或多个 catch 块(多重 catch 块);
  • try 块中也可以继续使用 try - catch 块(也就是嵌套 try - catch 块);

1.4 catch 块

  • catch 块需要参数,参数用于声明异常类型来处理异常;
  • catch 块参数常用异常类型有 ArithmeticException , ArrayIndexOutOfBoundsException,FileNotFoundException ,Exception,如果不清楚异常类型,可以只使用父类异常 Exception 作为参数,但效果会差一些;

1.5 多重 catch 块

public class Test1 {
    public static void main(String args[]) {
          try {
              int a[] = new int[3];
              // 这里的下标不能为 3,且不能除以 0
              a[3] = 30 / 0;
          }
          catch (ArithmeticException e) {
              System.out.println(e.toString());
          }
          catch (ArrayIndexOutOfBoundsException e) {
              System.out.println(e.toString());
          }
    }
}
运行结果:
    java.lang.ArithmeticException: / by zero
  • 一个 try 块之后可以有多个 catch 块,可以在发生不同的异常时执行不同的任务时使用;
  • 一次只发生一个异常,一次只执行一个catch块,所以运行结果只打印一个异常;
  • 每个 catch 块中的参数必须从最特定到最通用进行排序,常用的几种类型的排序就是 ArithmeticException , ArrayIndexOutOfBoundsException,FileNotFoundException ,Exception 。所有异常类型中 Eception 的范围最大,一定放最后;

1.6 嵌套 try - catch 块

有时 try 块中的一部分可能出现一个异常,另一部分可能出现另一个异常,嵌套 try - catch 块就派用场;

​
public class Test1 {
    public static void main(String args[]) {
          try {

              try {
                  // 不能除以 0
                  int a = 50 / 0;
              }
              catch (ArithmeticException e) {
                  System.out.println(e.toString());
              }

              try {
                  int b[] = new int[3];
                  // 下标不能 >= 3
                  b[3] = 3;
              }
              catch (ArrayIndexOutOfBoundsException e) {
                  System.out.println(e.toString());
              }

          }
          catch (Exception e) {
              System.out.println(e.toString());
          }
    }
}

​
运行结果:
    java.lang.ArithmeticException: / by zero
    java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

1.7 finally 块

  • finally 块用于封装无论是否处理异常都会执行的代码;
​
public class Test1 {
    public static void main(String args[]) {
        // 统计异常数目
        int count = 0;

          try {

              try {
                  // 不能除以 0
                  int a = 50 / 0;
              }
              catch (ArithmeticException e) {
                  System.out.println(e.toString());
                  count++;
              }

              try {
                  int b[] = new int[3];
                  // 下标不能 >= 3
                  b[3] = 3;
              }
              catch (ArrayIndexOutOfBoundsException e) {
                  System.out.println(e.toString());
                  count++;
              }

          }
          catch (Exception e) {
              System.out.println(e.toString());
              count++;
          }
          finally {
              System.out.println("运行结束,一共有" + count + "个异常");
          }
    }
}

​
运行结果:
    java.lang.ArithmeticException: / by zero
    java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    运行结束,一共有2个异常
  •  但也有四种特殊情况,finally 块是不会执行的:在前面的代码中使用了System.exit()退出程序;在finally语句块中发生异常;程序所在线程死亡;CPU 关闭了;

1.8 总结

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值