try...catch...finally回滚机制

1.try...catch...操作时,设定try里面异常时,则try中添加事务将回滚。

        try {
            System.out.printf("test0...");
            //插入一条数据
            addUser();
            //设置异常
           int i =1/0;
        }catch (Exception e){
            System.out.printf("test1...");
            throw new Exception(e.getMessage());
        }finally {
            //插入数据库
            System.out.printf("test2...");
        }

 try 块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行 catch 块。此时,catch 块会接收到一个包含错误信息的对象。

2.try...catch...操作时,设定finally里面异常时,则第一个try中删除事务将回滚。

        try {
            System.out.printf("test0...");
            //插入一条数据
            addUser();
        }catch (Exception e){
            System.out.printf("test1...");
            throw new Exception(e.getMessage());
        }finally {
            System.out.printf("test2...");
            //设置异常
            int i =1/0;
        }

总结: finally使用需要慎重,要考虑怎么控制事务

3.不论try中是否异常给catch,返回值都是finally决定最终结果

    public static void main(String[] args) throws Exception {
        String str = "";
        String s = printfTest(str);
        System.out.printf(s);
    }

    private static String printfTest(String str) {
        try {
            System.out.printf("test0...");
            //插入一条数据
            str = "1";
            return str;
        }catch (Exception e){
            System.out.printf("test1...");
            throw new Exception(e.getMessage());
        }finally {
            System.out.printf("test2...");
            str = "2";
            return str;
        }
    }

执行结果:

 test0...test2...2

 总结:finally中使用return时要注意它会改变值,所以一般finally一般都是建议处理一些关闭流的操作

 

你可能感兴趣的:(工作总结,记录,java)