返回顶部
首页 > 资讯 > 精选 >为什么要加final关键字
  • 913
分享到

为什么要加final关键字

2023-06-16 19:06:08 913人浏览 薄情痞子
摘要

为什么要加final关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开

为什么要加final关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是不太相同的。

现象描述

在 Java 8 之前,匿名内部类在使用外部成员的时候,会报错并提示 “Cannot refer to a non-final variable arg inside an inner class defined in a different method”

为什么要加final关键字

但是在 Java 8 之后,类似场景却没有再提示了:

为什么要加final关键字

难道是此类变量可以随便改动了吗?当然不是,当你试图修改这些变量的时候,仍然会提示错误:

为什么要加final关键字

可以看到,当试图修改基本数据类型的变量时,编译器的警告变成了 “Varible 'num' is accessed from within inner class, need to be final or effectively final”,很遗憾,仍然不能修改。相比之下,Kotlin 是没有这个限制的:

为什么要加final关键字

原因分析

从表面上当然看不出什么原因,看看编译器做了什么工作吧!运行 javac 命令后生成了几个 .class 文件:

为什么要加final关键字

不难推断,这个 TestInnerClass$1.class 就是匿名内部类编译后的文件,看看它反编译后是什么内容:

为什么要加final关键字

原来,匿名也会被当作普通的类处理,只不过编译器生成它构造方法的时候,除了将外部类的引用传递了过来,还将基本数据类型的变量复制了一份过来,并把引用数据类型的变量引用也传递了过来。因此,基本数据类型的变量当然不能修改了,不然就会跟外部的变量产生不一致,这样的话变量的传递也就变得毫无意义了。

情景对比

但是为什么对于 Kotlin 来说可以在匿名内部类中直接修改基本数据类型的值呢?查看 Kotlin 编译后反编译回来的内容:

为什么要加final关键字

可以发现,当需要传递基本数据类型的变量时,Kotlin 编译器会将这些数据进行包装,从而由值传递变为引用传递,这样内部的修改当然就不会影响到外部了。

验证一下,当变量不进行传递时,Kotlin 编译器是怎么处理的:

为什么要加final关键字

关于为什么要加final关键字问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 为什么要加final关键字

本文链接: https://lsjlt.com/news/285002.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么要加final关键字
    为什么要加final关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开...
    99+
    2023-06-16
  • c++ final关键字的作用是什么
    在C++中,final关键字用于指定类、成员函数或虚函数是最终的,不能被继承或重写。当一个类或者函数被声明为final时,它将不允许...
    99+
    2024-04-02
  • 详解Java关键字final
    目录一、常见问题二、final修饰类三、final修饰方法四、final方法是可以被重载的五、修饰变量六、static final七、black final八、final域重排序规则...
    99+
    2024-04-02
  • Java中final关键字的作用是什么
    这篇文章主要讲解了“Java中final关键字的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中final关键字的作用是什么”吧!final关键字的作用final关键字可以...
    99+
    2023-06-20
  • php中final关键字的用法是什么
    在PHP中,final关键字用于修饰类、方法或属性,表示它们不能被继承或覆盖。对于一个final修饰的类,不能被其他类继承;对于一个...
    99+
    2024-04-02
  • java final关键字怎么使用
    这篇文章主要介绍“java final关键字怎么使用”,在日常操作中,相信很多人在java final关键字怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java final关键字怎么使用”的疑惑有所...
    99+
    2023-07-04
  • 怎样用Java final 关键字
    怎样用Java final 关键字,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面好好地讲一讲 final 关键字,也希望给更多的小伙伴一些帮助。尽管继承可以让我们重用现有代...
    99+
    2023-06-03
  • c++ final关键字的工作原理是什么
    在C++中,final关键字用于修饰类、成员函数和虚函数,表示该类、成员函数或虚函数不能被继承或重写。当一个类被声明为final时,...
    99+
    2024-04-02
  • Java中final关键字和final的4种用法
    目录1、final 定义2、final 的 4 种用法2.1.修饰类2.2.修饰方法2.3.修饰变量2.4.修饰参数3、final 作用 1、final 定义 final 翻译成中文...
    99+
    2024-04-02
  • 详解Java中的final关键字
    目录概述使用方式修饰类修饰方法修饰变量概述 子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种...
    99+
    2022-11-13
    Java final关键字 Java final
  • JMM中的final关键字解析
    本篇内容介绍了“JMM中的final关键字解析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!与前面介绍的锁和volatile相比较,对fin...
    99+
    2023-06-02
  • php中final关键字的作用
    final关键字在php中发挥以下作用:类声明:阻止类被继承;方法声明:阻止方法被覆盖;作用包括:增强安全性、提高性能、强制设计原则、避免不必要的继承。 php中final关键字的作用...
    99+
    2024-04-27
  • java中的final关键字怎么使用
    在Java中,final关键字可以用于修饰类、方法和变量。1. final修饰类:final修饰的类是不可被继承的,即该类不能有子类...
    99+
    2023-08-24
    java final
  • 为什么python中需要命名关键字参数
    这篇文章将为大家详细讲解有关为什么python中需要命名关键字参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明*,nkw表示命名关键字参数,是用户想输入的关键字参数名称,定义方式是...
    99+
    2023-06-14
  • Java基础之关键字final详解
    Java-关键字:final 1 .final可以用来修饰的结构: 类、方法、变量 2.final 用来修饰一个类: 此类不能被其他类所继承 比如:String类、Sys...
    99+
    2024-04-02
  • PHP中final关键字如何使用
    今天就跟大家聊聊有关PHP中final关键字如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在PHP中类的继承是使用最多的一个编程特性,我们可以创建一个基类(父类)然后在这其中...
    99+
    2023-06-17
  • Java关键字final的示例分析
    小编给大家分享一下Java关键字final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、常见问题所有的final修饰的字段都是编译期常量吗如何理解p...
    99+
    2023-06-15
  • Java中如何使用final关键字
    Java中如何使用final关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 一.final关键字的基本用法  在Java中,final关键字可以用来修饰类、方法和变量...
    99+
    2023-06-19
  • java final 和instanceof 关键字的区别
    final 可以适用的范围:修饰类:使用这种修饰符的类无法被继承 修饰函数:被修饰的不能被重写 修饰属性:1.final修饰的成员变量是常量,值不能被修改  &n...
    99+
    2022-11-15
    java final instanceof
  • final关键字的作用有哪些
    本篇文章给大家分享的是有关final关键字的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。final 语义是不可改变的。    被 fi...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作