1.4 异常

60 阅读1分钟

image-20210510111816931.png

Exception 能被程序本身处理( try catch ), Error 是⽆法处理的(只能尽量避免) ,是 JVM 虚拟机的问题

image-20210510112050702.png

1.4.1 try catch finally 的返回问题

1、不管有没有出现异常,finally块中代码都会执行;

2、当try和catch中有return时,finally仍然会执行,在return 之前执行,但是 finally 中对于值的修改并不会影响上述 retrun 的值

3、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

public class Demo01 {
    public static class testDemo {
        /*第一种情况*/
        public int test01() {
            int i = 0;
            try {
                i++;   ------》1
                return i; ------》2
            } finally {
                i++;    ------》3
                System.out.printl("finally:i=" + i);  -----》4
            }
        }
       
        
  /*
  		1--》3---》4---》2 但是 finally 中的代码不会影响 return 里面的变量,因为return 已经在上一步写死了
        finally:i=2
        return: i=1
*/
        /*第二种情况*/
        public int test02() {
            int i = 0;
            try {
                i += 1;
                i = 3 / 0;
                return i;
            } catch (Exception e) {
                i += 2;
                return i;
            } finally {
                i += 5;
                System.out.println("finally:i=" + i);
            }
        }
  /*
        finally:i=8
        return: i=3
*/
        
        /*第三种情况*/
        public int test03() {
            int i = 0;
            try {
                i += 1;
                return i;
            } catch (Exception e) {
                i += 2;
                return i;
            } finally {
                i += 5;
                System.out.println("finally:i=" + i);
                return i;
            }
        }
  /*
        finally:i=6
        return: i=6
*/
        /*第四种情况*/
        public int test04() {
            int i = 0;
            try {
                i += 1;
                return i;
            } catch (Exception e) {
                i += 2;

            } finally {
                i += 5;
                System.out.println("finally:i=" + i);

            }
            return i += 100;
        }
    }

      /*
        finally:i=6
        return: i=1
*/
}