美文网首页
java final关键字的一些理解

java final关键字的一些理解

作者: Bfmall | 来源:发表于2021-04-18 16:06 被阅读0次

总结:
final可以修饰变量(成员变量+局部变量)、方法和类;
final变量不能再次赋值;
final成员变量必须在声明时赋值或者在构造器中初始化,否则编译通不过;
final局部变量必须在声明时赋值;
匿名类中使用的局部变量必须是final声明;
final方法不能被重写;
final类不能被继承;

一、修饰变量

final修饰的变量必须初始化,且一旦初始化后不能再被修改,下面是初始化时机的具体分析:

1、修饰成员变量

不管是类变量(有static)还是实例变量(无static),可以在声明的时候就初始化。对于类变量来说,可以在类中声明final类变量,在类代码块中初始化,如下图所示。这是因为在类中声明定义类变量,编译器会将该代码移入类代码块中的相应位置;对于实例变量也类似,不过将类代码块换成构造器而已,由此可见jvm不会对final修饰的变量赋初值。

//对于类变量来说,可以在类中声明final类变量,在类代码块中初始化
   public static final int a;

   static {
       a = 1;
   }


   public final int b;
   {
       b = 1;
   }

那对于类变量来说,可不可以在类中声明为final,在构造器中在对其进行初始化呢?看下图可知是不行的。因为类变量和实例变量的分配空间的时机不同。类变量实在类初始化时就已经分配空间了,而实例变量在新建对象时调用构造器对其进行分配空间,并进行初始化。因此,在构造器被调用之前类变量就已经有了内存空间了,编译器发现此时final修饰的类变量没有初始化就会报错。按道理说,成员变量在没有显示初始化的情况下,系统会自动赋初值0或null,由此也可以推断出jvm并没有为final修饰的成员变量隐式初始化。


image.png

2、修饰局部变量

java中局部变量必须显示初始化,jvm不会给局部变量隐式初始化,原因可能是一个方法中可能会声明多次,且声明周期可能各不相同,如果每次都默认初始化的话开销会很大,而且带来的效益并没有明显提升。final修饰局部变量时,只要在使用该变量前对其初始化即可,如下图所示:

image.png

3、修饰引用变量

指的是不能改变引用的指向,即只能指向同一处地址,但是能够修改指向对象的内容。

二、修饰成员方法

final修饰的成员方法不能被子类重写,但可以重载和调用。

三、修饰类

final修饰的类方法不能被继承,但可以创建对象。

四、修饰范围

final不能用来修饰构造器,因为final修饰的成员方法不能被重写,而构造器既不能被继承,也不能被重写,用final修饰符多此一举

相关文章

  • 2018-11-14号相关学习资料

    java中final关键字的作用深入理解Java中的final关键字java中的final如何使用和理解PPT和1...

  • java - final 关键字

    java - final 关键字 java - final 关键字 在 java 中,final 关键字可以修饰类...

  • Java/转载

    final关键字的性能影响 Java对象内存结构 全面理解Java内存模型 从Java视角理解CPU缓存和伪共享

  • Java关键字final、static使用总结

    Java关键字final、static使用总结 一、final 根据程序上下文环境,Java关键字final有“这...

  • Java关键字final、static使用总结

    Java关键字final、static使用总结 一、final 根据程序上下文环境,Java关键字final有“这...

  • 2017-12-30

    JAVA学习日记(5) final关键字,一些注意事项 final 修饰变量-无法被修改 final 修饰方法-不...

  • final、abstract以及接口

    final关键字 final 关键字可以用来修饰类,属性和方法。 final修饰类 Java 中 final 修饰...

  • 面向对象

    一、类和对象 二、封装 三、继承 Java中final关键字的使用 final关键字: 使用final关键字做标识...

  • Java学习16:final关键字、抽象类和接口

    final关键字 final是java语言中的一个关键字。 final表示最终的,不可变的。 final可以修饰变...

  • java-final关键字修饰变量

    在java中,final关键字可以对类、方法以及变量进行修饰,这里对final修饰变量进行一些探讨。final修饰...

网友评论

      本文标题:java final关键字的一些理解

      本文链接:https://www.haomeiwen.com/subject/aixplltx.html