Java中final关键字的使用

    
  

一.final可以修饰一个类

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

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

1.常量类不能被继承

举个例子:

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

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

此时上述代码会报错如下图:
在这里插入图片描述
  所以如果想从语法上对类的继承进行限制,可以使用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);
    }
}

初始化之后单元被锁定,变为只读
在这里插入图片描述



四.final修饰引用


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

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

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

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

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

可以通过下图进一步理解:
在这里插入图片描述


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

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

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

....
my.fun(3);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值