【Java基础专题】9. 谈一谈你对 final 关键字的理解?什么时候用这个关键字来定义呢?

本问题对应的项目链接:高频题回答模版训练

回答指导:最好可以聊一聊你的理解,然后举个具体的例子,不然我觉得,单纯聊他可以加在 xxx 上,没啥意义,有点纯记忆,希望大家可以聊一点偏「理解型」的。

共以下 12 个回答

  • 八点上线 永久会员 2024年12月13日 上午2:20

    final关键字修饰类,禁止继承,修饰方法禁止重写,修饰引用变量,禁止指向别的变量,修饰基本类型变量,禁止修改值,在单例模式的静态内部类写法中用final关键字来修饰对单例的引用,防止被修改

    0 赞同 0 条回复
  • Silence 永久会员 2023年10月23日 下午10:25

    首先来说一下这个final关键字,它可以使一个类不可以被继承,也可以使一个方法不可以被重写,同时还可以使一个值不可以被负第二次的值。

    从final这个关键字的功能上来看,我认为之所以要设计final这个关键字,它的目的也很明确。就是不希望我写的东西被别人修改,就比如说像这种枚举类型的常量,它就是不希望被别人修改,他就需要设置成final。又或者说比如String这个类,他也不希望有其他的string类来继承这个类,对他进行一些扩展。所以他设置成final。总之在实际的场景之中,可变的并不一定是好的。有一些东西我们就是希望他不可变,所以说才有了final这个关键词。

    0 赞同 0 条回复
  • LilyBoy 永久会员 2023年9月6日 上午11:43

    类、方法、基本数据类型、引用数据类型、字符数组->String:final+private

    0 赞同 0 条回复
  • 中国用户 永久会员 2023年6月26日 下午7:43

    final关键字修饰类,类不能被继承;修饰方法时,方法不能被重写;修饰变量时,变量不能改变

    0 赞同 0 条回复
  • mpweixin用户 永久会员 2023年6月19日 下午8:47

    final是java中的一个关键字,可以修饰类、方法和变量
    修饰类:final修饰的类为最终的类,不能被继承,同理所有的方法也不能被重写。比较常见的就是String类,不能被继承,方法也不能被重写。
    修饰方法:修饰方法时该方法为最终方法,不能被重写和覆盖,同时在修饰方法时不能和abstract关键字同时使用。
    修饰变量:
    1)修饰局部变量时,一次赋值,终身不变
    2)修饰成员变量时,由于成员变量需要有默认值,但是使用final修饰的成员变量不会自动赋默认值,需要手动赋初始值,手动赋初始值可以在声明时赋值,也可以在构造函数中赋值,但在构造函数中赋初始值需要所有构造函数都赋值
    3)修饰的变量又分为基本数据类型和引用数据类型,final修饰的基本数据类型的值只进行一次赋值,而引用数据类型是对引用地址只赋值一次,引用地址不能改变,但是可以改变该引用地址中的值。
    4)我们所使用的常量如PI就是final修饰的全局常量。

    0 赞同 0 条回复
  • 。 永久会员 2023年6月19日 上午12:25

    final可以用来修饰类,方法,变量;
    在修饰类时,类不能被继承,比如string,保证不能修改字符串对象;
    在修饰方法时,方法不能重写,比如toString,hashCode,只能覆盖;
    在修饰变量时,如果是基本数据类型,则值不变,如果是引用数据类型,则地址不变;

    0 赞同 0 条回复
  • 小肸 永久会员 2023年6月4日 下午8:20

    final是Java中的一个关键字,可以用来修饰类、方法、变量。当用final来修饰类时,表示这个类不可以被继承,可以确保一些安全性,防止类被纂改。而final用来修饰方法,表示方法不可以被重写,final修饰变量时,如果是基本数据类型,值不变。如果是引用类型,引用指向的地址值不变,但地址的内容可能会变。final可以用来解决一些安全性问题。比如Java的一些核心类库的类的API接口不想被纂改就使用final修饰方法。Java希望String类是不可变的,就使用final修饰String类并且修饰成员变量char[]数组,并且没有提供setter方法,这样就可以确保String类是不可变的。另外,如果有多个线程操作同一个变量,并且这个变量的值不会变化,可以考虑使用final修饰解决线程安全问题。

    0 赞同 0 条回复
  • Gary 永久会员 2023年6月2日 下午3:03

    final可以用来修饰类、方法、方法的参数、变量。
    final修饰的类不能被继承,例如String类,不能有子类。
    修饰的方法不能被重写,修饰的方法参数和变量不能被重新赋值,都是只读的,可以防止其它逻辑修改了这个量,意思是final修饰的变量都是常量。从代码规范来看,final修饰的变量,变量名都要用大写字母,然后从性能上看,JVM会缓存final修饰的变量

    0 赞同 0 条回复
  • upward ᯤ⁶⁰ᴳ 永久会员 2023年6月2日 上午12:57

    final变量的引用是不可以改变的,final方法不可以重写,final类不可以被继承,(static final编译时期生成,在使用该变量时不会导致类加载。)

    0 赞同 0 条回复
  • Everglow 永久会员 2023年5月31日 上午12:54

    final一般修饰与类或者变量上代表这个类不可被继承,或者这个变量不可被修改或这个引用不能指向其他对象。

    对于不希望被修改的值或继承的类,我们都可以通过final修饰。并且因为final变量的初衷就是告诉编译器,我这个变量是不可变的,编译器可以随意优化(重排序),并且在java1.5后对构造器内final的重排序进行了约束,不会发生逸出现象。还有一点通过static和final搭配使用,在使用该变量时不会导致类加载。

    0 赞同 0 条回复
  • 秊 永久会员 2023年5月30日 下午9:44

    final 字面意思是 “最终的”,就是说无论用它来修饰字段,方法还是类,都表示它是最终的,不可变了。具体来说,一个 final 类不可被继承,final 方法不可被重写, final 字段不可被修改,但对于引用类型可以更改其内部的值。实践中通常将一个常量,或者确定在之后的代码中不应该被修改的字段声明为 final。

    1 赞同 0 条回复
  • mpweixin用户 永久会员 2023年5月30日 下午7:56

    类加上final证明不能在被继承,方法加上不能重写,变量加上只能赋值一次,比如 final int x = 1,x++就是错的,但是x+1是可以成功的,就是说对象不能再变,但是里面的内容的值是可以变的。一般配上static用(我是菜鸡,大佬们看到哪儿错了可以踢我一下,谢谢)

    0 赞同 0 条回复

# 回答此问题

后才能回答