面试系列—final、finally、和finalize的不同

  • final

final可以用来修饰类、方法、变量分别有不同的意义。修饰class表示这个累不可以被继承扩展、修饰变量表示这个变量是不可修改的、修饰函数表示这个函数不可以被重写 .

  1. 我们可以将方法和类声明为final,明确告诉别人这些行为是不允许修改的,java中的一些核心类库就是这样设计的,这样可以有效避免API使用者更改基础功能,保证安全。

  2. 将变量声明为final,可以用于保护只读数据。在并发编程中,因为final变量不能再赋值,有利于减少额外的同步开销。

  3. final修饰变量指的是:这个变量被初始化后便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可变,即不能再指向其他的对象。如果final修饰的变量是对象类型,那么不可更改指的是该变量不可以再指向别的对象,但是对象的值时可以更改的,比如下面代码。

//对象的值可以被修改
final List strList = new ArrayList<>();
strList.add("hello");
strList.add("world");
 * 错误,调用方法的时候已经对x进行赋值,不能再对其进行++操作。
 */
public class Something { 
    public int addOne(final int x) { 
        return ++x; 
    }  
} 
/*
 * 正确,因为final修饰的类,但++的却是其对象,说明类属性改变,类不一定跟着改变
 */
public class Something { 
    public static void main(String[] args) { 
        Other o = new Other(); 
        new Something().addOne(o); 
    } 
    public void addOne(final Other o) { 
        o.i++; 
    }  
} 
class Other { 
    public int i;
} 
  • Finally

  • finally是java保证重点代码被执行的一种机制,一般使用try-catch-finally来进行类似关闭jdbc连接,IO流等一些动作。
  • finally里面代码也不一定会被执行,如果try-catch执行了死循环或者退出进程,finally中的代码就不会再执行。如下:
try{
    //do something
    System.Exit();
} finally{
    System.out.println(“print from..);
}
  • finalize

是基础类Object的一个方法,用来保证对象在被垃圾收集前完成特定资源的回收。现在已经不推荐使用了。

你可能感兴趣的:(面试系列—final、finally、和finalize的不同)