其他分享
首页 > 其他分享> > try-catch-finally

try-catch-finally

作者:互联网

try-catch-finally 的细解基本测试案例

第一、只要有finally,那么finally块中代码就会执行;这句话很重要
第二、如果try-catch中有return , finally也有return有如下两种情况(test03、test04):

public class TestFinally {

    public static void main(String[] args) {
        TestFinally tf = new TestFinally();
        System.out.println("-------------<1>------------");
        try {
            System.out.print(1);
        }finally {
            System.out.print(0);
        }
        System.out.println();
        System.out.println("-------------<2>------------");
        System.out.println(tf.test01());
        System.out.println("-------------<3>------------");
        System.out.println(tf.test02());
        System.out.println("-------------<4>------------");
        System.out.println(tf.test03());
        System.out.println("-------------<5>------------");
        System.out.println(tf.test04().age);
    }

    public int test01(){
        try {
            return 1;
        }finally {
            System.out.print(0);
        }
    }

    public int test02(){
        try {
            return 2;
        }finally {
            return 3;// 只是为了验证finally,实际开发别这么写
        }
    }

    public int test03(){
        int t = 0;
        try {
            t = 4;
            return t;//执行 finally 之前,JVM 会先将 t = 4 的结果暂存起来,然后 finally 执行完毕后,会返回之前暂存的结果,而不是 t = 5 ,可以自行编译了解细节
        }finally {
            t = 5;
        }
    }

    public Cat test04(){
        Cat cat = new Cat();
        try {
            cat.age =6;
            return cat;//return在执行时,会复制了一个cat引用,指向Cat的实例,在finally改变了实例的age值后,cat仍然指向被改变的实例
        }finally {
            cat.age =7;
        }
    }
}
class Cat{
    public int age;
}

输出结果如下:

-------------<1>------------
10
-------------<2>------------
01
-------------<3>------------
3
-------------<4>------------
4
-------------<5>------------
7

标签:return,System,try,println,finally,catch,-------------------------,out
来源: https://www.cnblogs.com/jiehao-yu/p/16489993.html