欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中final关键字的使用

程序员文章站 2024-03-23 15:33:46
...

    
  

一.final可以修饰一个类

  
  当一个类用final关键字来修饰的时候,此时这个类变为常量类

那么常量类有什么特征呢?

1.常量类不能被继承

举个例子:

//用final修饰一个Myclass类
final class Myclass{
    //.....
}

//定义一个student类继承Myclass
class student extends  Myclass{
    //....
}

此时上述代码会报错如下图:
Java中final关键字的使用
  所以如果想从语法上对类的继承进行限制,可以使用final关键字来进行修饰类(谨慎使用)


2.常量类的成员变量可以按照需求设计为final
3.成员方法会被隐式的指定为final



二.final修饰成员方法


1.将方法进行锁定,以防止任何类通过继承来重写方法

2.优化程序,提高效率

3.只有明确禁止该方法在子类中被重写的情况下,才可以将该方法修饰为final(当基类的方法被声明为final时,就绝对共享了,派生类里不能够重写)

———修饰为final的成员方法在使用时,若一个基类的所有派生类在实现同一方法时,过程相同(即方法代码相同),可以将该方法在基类*享实现,设为final方法,为所有派生类共享

4.基类中的private方法将被隐式定义为final(任何情况下都不被派生类重写)



三.final修饰成员变量


   1.成员变量被final修饰,则为常量,只读不能被修
   2.一旦成员变量被final修饰,该类无论有多少个对象,所有对象的成员变量值都相同,且只读
  3.如被final修饰,一定要先初始化(直接初始化或者构造初始化)

class Myclass{
    private final int x;
    private final int y;

    public Myclass(){
        x=0;
        y=0;
    }

    public Myclass(int x,int y){
        this.x=x;
        this.y=y;
    }
}


class Test{
    public static void main(String[] args) {
        Myclass my1 = new Myclass();
        Myclass my2 = new Myclass(3, 4);
    }
}

初始化之后单元被锁定,变为只读
Java中final关键字的使用



四.final修饰引用


先明白两个概念:
 1.常量指针----指针是常量

int * const p;   //代表p是常量 ,指向不变,但指向单元里的内容可变

 2.指针常量----指针是变量,指向的对象是常量

const int *p;   //对象是常量

对比上述两个概念:
 在Java中final修饰引用的话,即引用是常量(指向不变),但是对象不是常量(就是一旦指针引用一个对象,不可以再改变去引用其他的对象,但是要注意的是引用的对象里的值是可以改变的)

可以通过下图进一步理解:
Java中final关键字的使用


五.final修饰局部变量(形参)

  final修饰局部变量就是修饰一个普通的变量,要进行初始化,且替换执行

public void fun(final int x){
   final int y=6;
   x=5;         //编译会出错(此语句的意思是3=5)在这里x是进行直接替换的
  .....
}

....
my.fun(3);
相关标签: final关键字