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

    一.Java中的final可以用到数据、方法、类中

    1.fianl修饰的数据:常量

    当在一个变量定义前面使用final关键字,那么这个变量就必须在定义时初始化,如下:

    private final static int static_num1=10;//final常量必须在创建是完成初始化

     常量在创建的时候就必须完成初始化

    当final 和static联合使用时,需要注意一个初始化问题,如下:

    在这里使用一个非静态的变量ran来初始化一个静态常量 static_num2,发生了报错,并不是非静态变量不能初始化静态变量,而是在类变量的定义中静态变量优先于非静态变量的初始化,所以在创建static_num2的时候ran变量还没有创建,发生报错。

    在函数中充当形参,注意点:

    public int add(final int num) {
            return num+1;//num+1能够返回   但是num++ 和++num不能够返回 ,因为num不是一个可改值,采用前缀自增或者后缀自增将改变其本身的值,但是采用+1只是将其作为一个常量
        }

    2.final修饰的对象引用

     注意:fianl修饰对象,并不是对象不能更改,而是被修饰的引用不可以在指向其他对象,而对象本身是可以修改的。

    例子如下:

    那么在向一个函数传递实参时,这个final修饰的对象就很重要了,他可以保证你的引用实参不会在函数里被修改。看下面的例子:

    public static void f(final A a) {
            System.out.println("调用了fianl类型的参数");
            a = new A();//错误
        }

    我们在调用这个函数f时传入的参数A类的引用不需要是fianl类型的。

     3.final修饰的方法:

    final修饰的方法通常就是使得一个方法不能够被继承时被子类进行重写,那么使用关键字private也是同样的效果,他将使得子类无法获得父类该方法。

    例子:

    父类:

    子类:

    对于使用final修饰的了f1(),编译器直接报出无法重写的错误。而对于使用private修饰的f2()方法,编译器则直接报出去除重写标签(@override)的提示,那么这也就是说当去除标签后,相当于在子类里重新建立了一个新的方法f2(),这个方法与父类是没有任何一点关系的。

    4.final修饰的类

    使用fianl来修饰类,那么这个类将会是无法继承的,同样的如果这个类无法被继承,那么就不存在方法重写,所以对于一个final类他的方法从某种角度将就是默认为final的

    例子:

     

  • 相关阅读:
    【今日CS 视觉论文速览】4 Jan 2019
    【今日CS 视觉论文速览】3 Jan 2019
    【今日CS 视觉论文速览】1 Jan 2019
    【机器学习】混淆矩阵及其绘制
    【Vim】批量插入注释符号
    【今日CS 视觉论文速览】31 Dec 2018
    【深度学习风格化/生成艺术】图像融合--毫无违和
    CSDN的一些年度大牛(2018)
    【今日CS 视觉论文速览】 27 Dec 2018
    python与机器视觉(X)打包为exe可执行文件
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9365345.html
Copyright © 2011-2022 走看看