• try{}catch(){}的执行过程


    情形一:catch中抛出异常,让调用方来处理

     1 public class HelloWorld {
     2     public static void main(String []args) {
     3         System.out.println("Hello World!");
     4         String c = "wo";
     5         try{
     6             c = test();  // "wo"
     7         }catch(Exception e){
     8             e.printStackTrace();
     9         }
    10         System.out.println(c); // "wo"
    11     }
    12     public static String  test() throws Exception{
    13         int a = 10;
    14         int b = 0;
    15         try{
    16             System.out.print("前");    
    17             int d = a/b;
    18             return "hello";  // 不执行
    19         }catch(Exception e){
    20             System.out.print("后");
    21             throw new Exception("有问题"); //函数结束,抛出异常
    22         }
    23         //return "默认值";
    24     }
    25 }

    注解:

      1、因为throw会直接抛出错误,后面语句不会再执行,所以不能写第23行。

      2、因为异常发生在17行(int d = a/b;),所以17行之前代码还是会生效,之后的代码则不会执行,直接进入catch中;

      3、第6行(c = test();),c的值并没有被函数test修改成功,此时c="wo"。

    情形二:catch中不抛异常,直接处理

     public class HelloWorld {
     2     public static void main(String []args) {
     3         System.out.println("Hello World!");
     4         String c = "wo";
     5         try{
     6             c = test(); // "默认值"
     7         }catch(Exception e){
     8             e.printStackTrace();
     9         }
    10         System.out.println(c); // "默认值"
    11     }
    12     public static String  test() throws Exception{
    13         int a = 10;
    14         int b = 0;
    15         try{
    16             System.out.print("前");    
    17             int d = a/b;
    18             return "hello";  // 不执行
    19         }catch(Exception e){
    20             System.out.print("后");
    21             //throw new Exception("有问题");
    22         }
    23         return "默认值";
    24     }
    25 }

    注解:

      1、因为函数是有返回类型(String),所以在没有第21行的情形下,没有第23行就会报错。此函数必须要有返回值(必须有第23行)。

      2、函数test()有返回值,此时c="默认值",已经被函数test修改。

      3、因为test方法没有抛出异常,所以调用方main函数不需要try-catch,代码可以改写成如下形式:

     public class HelloWorld {
     2     public static void main(String []args) {
     3         System.out.println("Hello World!");
     4         String c = "wo";
     6         c = test(); // "默认值"
    10        System.out.println(c); // "默认值"
    11     }
    12     public static String  test(){
    13         int a = 10;
    14         int b = 0;
    15         try{
    16             System.out.print("前");    
    17             int d = a/b;
    18             return "hello";  // 不执行
    19         }catch(Exception e){
    20             System.out.print("后");
    22         }
    23         return "默认值";
    24     }
    25 }
  • 相关阅读:
    P4715 【深基16.例1】淘汰赛
    P4913 【深基16.例3】二叉树深度
    P1478 陶陶摘苹果(升级版)
    P1223 排队接水
    【深基12.例1】部分背包问题
    全排列和组合
    P1036 选数
    100——第25例
    100——第24例
    100——第23例
  • 原文地址:https://www.cnblogs.com/mengxiangtiankongfenwailan/p/16077529.html
Copyright © 2020-2023  润新知