final相关内容

在 Java 中声明方法参数 final 是否有任何性能原因?

在 Java 中将方法参数声明为 final 是否有任何性能原因? 如: public void foo(int bar) { ... } 对比: public void foo(final int bar) { ... } 假设 bar 在 foo() 中只被读取,从不修改. 解决方案 final 关键字不会出现在局部变量和参数的类文件中,因此不会影响运行时性能.它的唯一用 ..
发布时间:2021-12-08 11:55:07 Java开发

为什么`private val` 和`private final val` 不同?

我以前认为 private val 和 private final val 是一样的,直到我在 Scala Reference 中看到第 4.1 节: 常量值定义的形式为 final val x = e 其中 e 是一个常量表达式(第 6.24 节).final 修饰符必须存在,并且不能给出类型注释.对常量值 x 的引用本身被视为常量表达式;在生成的代码中,它们被定义的右侧 e 替换. ..
发布时间:2021-12-07 13:12:48 其他开发

Java最终抽象类

我有一个很简单的问题: 我想要一个 Java 类,它提供一个公共静态方法,它可以做一些事情.这只是为了封装的目的(将所有重要的东西都放在一个单独的类中)... 这个类既不应该被实例化,也不应该被扩展.这让我写道: final 抽象类 MyClass {静态无效我的方法(){...}...//更多私有方法和字段...} (虽然我知道,这是被禁止的). 我也知道,我可以使这个类完 ..
发布时间:2021-11-26 16:27:40 Java开发

编译时常量和变量

Java 语言文档说: 如果将原始类型或字符串定义为常量并且值在编译时已知,编译器替换常量名代码中随处可见的值.这称为编译时常数. 我的理解是如果我们有一段代码: private final int x = 10; 然后,编译器会将代码中出现的每个 x 替换为文字 10. 但是假设常量是在运行时初始化的: private final int x = getX();//这里 ..
发布时间:2021-11-25 19:48:13 Java开发

Java 最终修饰符

有人告诉我,我误解了 final 的效果.final 关键字的作用是什么? 这是我的想法的简短概述,我知道: Java final 修饰符(又名聚合关系) 原始变量:只能设置一次.(内存和性能增益) objects变量:可以修改,final适用于对象参考. 字段:只能设置一次. 方法:不能被覆盖、隐藏. 类:无法扩展. 垃圾收集:将强制 Java 分代垃圾收集标记扫描到 ..
发布时间:2021-11-25 19:42:36 Java开发

在 Java 中禁止继承的充分理由?

在 Java 中禁止继承的充分理由是什么,例如使用 final 类或使用单个私有无参数构造函数的类?使方法最终化的充分理由是什么? 解决方案 这里最好的参考是 Joshua Bloch 的优秀著作《Effective Java》的第 19 条,名为“继承的设计和文档,否则禁止它".(这是第二版的第 17 项和第一版的第 15 项.)你真的应该读一读,但我会总结一下. 如果祖先不是为了 ..
发布时间:2021-11-25 19:40:53 Java开发

为什么要在 Java 中声明一个不可变的类 final?

我读到要在 Java 中使 类不可变,我们应该执行以下操作, 不要提供任何 setter 将所有字段标记为私有 使课程最终化 为什么需要第 3 步?为什么要标记类 final? 解决方案 如果您不将类标记为 final,我可能会突然使您看似不可变的类实际上是可变的.例如,考虑以下代码: 公共类不可变{私有最终整数值;公共不可变(整数值){this.value = 值;}公 ..
发布时间:2021-11-25 19:09:29 Java开发

私有最终静态属性与私有最终属性

在 Java 中,有什么区别: private final static int NUMBER = 10; 和 private final int NUMBER = 10; 都是private和final,区别在于static属性. 什么更好?为什么? 解决方案 一般来说,static 的意思是“与类型本身相关联,而不是与实例相关联" 类型." 这意味着您可以引用静态变 ..
发布时间:2021-11-25 19:00:25 Java开发

最终静态方法的行为

我一直在玩带有静态方法的修饰符,遇到了一个奇怪的行为. 正如我们所知,静态方法不能被覆盖,因为它们与类而非实例相关联. 所以如果我有下面的代码片段,它编译得很好 //Snippet 1 - 编译良好公共类 A {静态无效 ts() {}}B 类扩展 A {静态无效 ts() {}} 但是如果我在类 A 的静态方法中包含 final 修饰符,那么编译就会失败B 中的 ts() 不能覆 ..
发布时间:2021-11-25 18:37:05 Java开发

为什么 String 类在 Java 中被声明为 final?

当我得知 java.lang.String 类在 Java 中被声明为 final 时,我想知道为什么会这样.当时我没有找到任何答案,但是这篇文章:如何在 Java 中创建 String 类的副本? 让我想起了我的查询. 当然,String 提供了我曾经需要的所有功能,而且我从未想过任何需要扩展 String 类的操作,但您仍然永远不知道某人可能需要什么! 那么,有没有人知道设计师在决 ..
发布时间:2021-11-25 16:47:46 Java开发

Lambdas:局部变量需要final,实例变量不需要

在 lambda 中,局部变量需要是最终的,但实例变量不需要.为什么会这样? 解决方案 字段和局部变量的根本区别在于局部变量在 JVM 时复制创建一个 lambda 实例.另一方面,字段可以自由更改,因为对它们的更改也会传播到外部类实例(它们的范围是整个外部类,正如鲍里斯在下面指出的那样).> 考虑匿名类、闭包和labmdas的最简单方法是从变量作用域的角度来看;想象一下,为传递给闭包的 ..
发布时间:2021-11-25 16:10:57 Java开发

为什么将局部变量和方法参数标记为“final"?在爪哇?

在 Java 中,您可以使用 final 关键字来限定局部变量和方法参数. public static void foo(final int x) {最终字符串 qwerty = "bar";} 这样做会导致无法在方法体中重新分配 x 和 qwerty. 这种做法将您的代码推向不变性的方向,这通常被认为是一个优点.但是,它也往往会使代码混乱,到处都是“最终".您对 Java 中局部变量和 ..
发布时间:2021-11-25 15:48:16 Java开发

什么时候应该对方法参数和局部变量使用 final?

我找到了一些参考资料(例如)建议尽可能多地使用 final ,我想知道这有多重要.这主要是在方法参数和局部变量的上下文中,而不是在最终方法或类中.对于常量,这显然是有意义的. 一方面,编译器可以做一些优化,让程序员的意图更加清晰.另一方面,它增加了冗长并且优化可能是微不足道的. 这是我应该努力记住的事情吗? 解决方案 痴迷于: Final 字段 - 将字段标记为 fina ..
发布时间:2021-11-25 14:50:35 Java开发

用 == 比较在 Java 中声明为 final 的字符串

我有一个关于 Java 字符串的简单问题.下面这段简单的代码只是将两个字符串连接起来,然后将它们与 == 进行比较. String str1="str";字符串 str2="ing";字符串 concat=str1+str2;System.out.println(concat=="string"); 比较表达式 concat=="string" 返回 false 很明显(我理解 equals( ..
发布时间:2021-11-25 13:42:54 Java开发

在 Java 中使用 final 关键字会提高性能吗?

在 Java 中,我们看到很多地方可以使用 final 关键字,但它的使用并不常见. 例如: String str = "abc";System.out.println(str); 在上面的例子中,str 可以是 final 但这通常被忽略. 当一个方法永远不会被覆盖时,我们可以使用 final 关键字.同样,对于不会被继承的类. 在任何或所有这些情况下使用 final 关键 ..
发布时间:2021-11-25 13:01:18 Java开发

“最后一堂课"有什么意义?在爪哇?

我正在读一本关于 Java 的书,它说你可以将整个类声明为 final.我想不出有什么地方可以使用它. 我刚接触编程,我想知道程序员是否真的在他们的程序中使用了这个.如果他们这样做,他们什么时候使用它,以便我可以更好地理解它并知道何时使用它. 如果Java是面向对象的,你声明一个类final,是不是就停止了类具有对象特性的想法? 解决方案 首先推荐这篇文章:Java:何时创建最 ..
发布时间:2021-11-25 12:59:55 Java开发

“最终"是怎么来的?Java中的关键字工作?(我仍然可以修改一个对象.)

在 Java 中,我们使用带有变量的 final 关键字来指定其值不会被更改.但是我看到您可以更改类的构造函数/方法中的值.同样,如果变量是 static 那么它是一个编译错误. 代码如下: import java.util.ArrayList;导入 java.util.List;类测试{私人最终列表 foo;公共测试(){foo = new ArrayList();foo.add("fo ..
发布时间:2021-11-25 11:55:27 Java开发

最终和有效最终之间的区别

我在 Java 8 中使用 lambdas 并遇到警告从 lambda 表达式引用的局部变量必须是最终的或有效的最终.我知道当我在匿名类中使用变量时,它们在外部类中必须是 final,但是 - final 和 effectively final 之间有什么区别? 解决方案 ... 从 Java SE 8 开始,本地类可以访问最终或有效最终的封闭块的局部变量和参数.在初始化后值永远不会改 ..
发布时间:2021-11-25 11:23:14 Java开发