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 }

 

posted @ 2022-03-30 16:12  青牛梦旅行  阅读(189)  评论(0编辑  收藏  举报