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的

    例子:

     

  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9365345.html
Copyright © 2011-2022 走看看