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

final关键字的几种用法

程序员文章站 2023-08-26 14:32:42
1.final关键字有几种用法(1)修饰变量用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final 修饰的变量可以先声明,后赋值。final修饰基本类型时,起到常量的作用,基本类型的值不可变。final修饰引用类型时,不能再指向其他的对象,但被引用的对象的值是可以改变的(引用变量的值实际上是它所引用的对象的地址)。当用final作用于类的成员变量时,成员变量(局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值。(2...

1.final关键字有几种用法

(1)修饰变量

  • 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final 修饰的变量可以先声明,后赋值。
  • final修饰基本类型时,起到常量的作用,基本类型的值不可变。
  • final修饰引用类型时,不能再指向其他的对象,但被引用的对象的值是可以改变的(引用变量的值
    实际上是它所引用的对象的地址)。
  • 当用final作用于类的成员变量时,成员变量(局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值。

(2)修饰方法参数

  • 编写方法时,可以在参数前面添加final关键字,它表示在整个方法中,不会(实际上是不能)改变参数的值,具体类似于修饰数据。
  • 即不能改变参数的值,但是可以改变引用类型参数的对象的值。同时,即使没有final的修饰,参数的改变也不会影响到方法外的变量。

(3)修饰方法

  • final关键字修饰方法,它表示该方法不能被覆盖(重写)。另外,类中所有的private方法都隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它。此时可以在子类中定义相同的方法名和参数,这种情况不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。可以对private方法添加final修饰符,但并没有添加任何额外意义。
    (4) 修饰类
  • 用final修饰的类是无法被继承的。且final类中的所有成员方法都会被隐式地指定为final方法。

2.final 与 static 关键字区别?

final关键字的几种用法

  • static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变,运行代码,两次打印的j值都是一样的,而i的值却是不同的。

3.final变量和普通变量的区别

  • 当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。而对于普通变量的访问却需要在运行时通过链接来进行。
    final关键字的几种用法

4.final、static、static final修饰的字段赋值的区别

  • (1)static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。
  • (2)final修饰的字段在运行时被初始化(可以直接赋值也可以在实例构造器中赋值),一旦赋值便不可更改;
  • (3)static final修饰的字段在Javac时生成ConstantValue属性,在类加载的准备阶段根据 ConstantValue的值为该字段赋值,它没有默认值,必须显式地赋值,否则Javac时会报错。 可以理解为在编译期即把结果放入了常量池中。

5.final关键字的好处

  • final关键字提高了性能。JVM和Java应用都会缓存final变量。

  • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

  • 使用final关键字,JVM会对方法、变量及类进行优化。

  • final和abstract这两个关键字是反相关的,final类就不可能是abstract的

  • 在匿名类中所有变量都必须是final变量

6. 使用final方法的原因

  • 第一个原因是把方法锁定,以防任何继承类修改它的含义;
  • 第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

参考链接:https://blog.csdn.net/u012723673/article/details/80580011

本文地址:https://blog.csdn.net/weixin_44938145/article/details/114303343

相关标签: Java