Java面试基础篇——第七篇:浅析final关键字

原创
2018/07/19 15:12
阅读数 147

Java有许多关键字,static和final这两个是我们必须掌握的,它们有很多种用法,而且在恰当的环境下使用它们,可以提升程序运行性能,优化程序结构,现在我们先来了解下final关键字。

1. final关键字用法

final关键字可以用来修饰类,方法,变量(局部变量和成员变量) ,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内,不可以改变它的值。

1.1 修饰变量


/**
 * @author Lee
 * @// TODO 2018/7/19-11:08
 * @description
 */
public class MapTest {

    public static void main(String[] args) {
        final int v1 = 1;
        final int v2;
        v2 = 2;
        final FinalTest test = new FinalTest(1);
        test.v = 4;
        System.out.println("v1:" + v1 + ",v2:" + v2 + ",v:" + test.v);

    }
}
class FinalTest {
    int v;
    public FinalTest(int v){
        this.v = v;
    }
}

在给v1赋初始值之后,v1的值不会再被修改。从v2可以看到,final修饰的变量可以不在声明时赋值,即可以先声明,后赋值。v是一个引用变量,当final修饰引用变量时,只是它的引用不可改变,但是引用对象的值是可以改变的。

1.2 修饰方法

“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。” ————《Java编程思想》

类的private 方法会被隐式的指定为final方法。

1.3 修饰方法参数

如果变量是作为参数传入的,我们怎么保证它的值不会改变呢?这就用到了final的第二种用法,即在我们编写方法时,可以在参数前面添加final关键字,它表示在整个方法中,我们不会(实际上是不能)改变参数的值

    final void  output(final int f){
        System.out.println(f);
    }

1.4 修饰类

final修饰的类是无法被继承的,如果一个类你永远不会让它继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类

总结

  • 1.final用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
  • 2.用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
  • 3.修饰方法,表示该方法无法被重写;
  • 4.修饰类,表示该类无法被继承。

上面的四种方法中,第三种和第四种方法需要谨慎使用,因为在大多数情况下,如果是仅仅为了一点设计上的考虑,我们并不需要使用final来修饰方法和类。

展开阅读全文
打赏
0
5 收藏
分享
加载中
更多评论
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部