zoukankan      html  css  js  c++  java
  • final关键字

    final关键字的基本用法

    1.修饰数据

    在编写程序时,我们经常需要说明一个数据是不可变的,我们成为常量。在java中,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。更重要的是,final会告诉编译器,这个数据是不会修改的,那么编译器就可能会在编译时期就对该数据进行替换甚至执行计算,这样可以对我们的程序起到一点优化。不过在针对基本类型和引用类型时,final关键字的效果存在细微差别。

    举例:

    class Value {
        int v;
        public Value(int v) {
            this.v = v;
        }
    }
    
    public class FinalTest {
        
        final int f1 = 1;
        final int f2;
        public FinalTest() {
            f2 = 2;
        }
    
        public static void main(String[] args) {
            final int value1 = 1;
            // value1 = 4;
            final double value2;
            value2 = 2.0;
            final Value value3 = new Value(1);
            value3.v = 4;
        }
    }

    在给value1赋初始值之后,我们无法再对value1的值进行修改,final关键字起到了常量的作用。从value2我们可以看到,final修饰的变量可以不在声明时赋值,即可以先声明,后赋值。value3时一个引用变量,这里我们可以看到final修饰引用变量时,只是限定了引用变量的引用不可改变,即不能将value3再次引用另一个Value对象,但是引用的对象的值是可以改变的

    2.修饰方法参数

    前面我们可以看到,如果变量是我们自己创建的,那么使用final修饰表示我们只会给它赋值一次且不会改变变量的值。那么如果变量是作为参数传入的,我们怎么保证它的值不会改变呢?这就用到了final的第二种用法,即在我们编写方法时,可以在参数前面添加final关键字,它表示在整个方法中,我们不会(实际上是不能)改变参数的值:

    public class FinalTest {
    
        /* ... */
    
        public void finalFunc(final int i, final Value value) {
            // i = 5; 不能改变i的值
            // v = new Value(); 不能改变v的值
            value.v = 5; // 可以改变引用对象的值
        }
    }

    3.修饰方法

    第三种方式,即用final关键字修饰方法,它表示该方法不能被覆盖。这种使用方式主要是从设计的角度考虑,即明确告诉其他可能会继承该类的程序员,不希望他们去覆盖这个方法。这种方式我们很容易理解,然而,关于private和final关键字还有一点联系,这就是类中所有的private方法都隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它。

    总结

    final关键字是我们经常使用的关键字之一,它的用法有很多,但是并不是每一种用法都值得我们去广泛使用。它的主要用法有以下四种:

    1. 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
    2. 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
    3. 修饰方法,表示该方法无法被重写;
    4. 修饰类,表示该类无法被继承。
  • 相关阅读:
    设计模式
    三——第二部分——第二篇论文 计划建设SQL Server镜像
    非正确使用浮点数据由项目产生BUG讨论的问题
    重写ViewPager实施单一交有关切换到这个问题,并没有缓存
    1159 Palindrome(最小插入回文串)
    CSDN-markdown编者LaTex数学公式
    找工作总结
    开展:随笔记录 OSGI的jar增加了一些小问题和注意事项
    js jquery版本号 金额千分之一转换功能(非规范,高效率)
    dom4j.jar有什么作用?
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/10958767.html
Copyright © 2011-2022 走看看