直接上代码

public static int a(){
        int i = 1;
        try{
            i++;
            return ++i;
        }catch(Exception e){

        }finally {
            if(i > 1){
                System.out.println(" i =  " + i);// i =  3
            }
        }
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(a());//  结果: 3
    }

finally 中的代码必然会执行,但是是在执行return的逻辑后 ,方法返回之前执行的。

下面再看一段代码:

public static int a(){
        int i = 1;
        try{
            i++;
            return ++i;
        }catch(Exception e){

        }finally {
            if(i > 1){
                System.out.println(" i =  " + i);// i =  3
            }
            return ++i;
        }

    }

    public static void main(String[] args) {
        System.out.println(a());// 4
    }

此时,方法返回的结果是4,也就是说,返回值被覆盖了。