标签: final

C++ 11中"final"关键字用于函数的目的是什么?

finalC++ 11中关键字用于函数的目的是什么?我理解它可以防止派生类的函数覆盖,但如果是这种情况,那么将你的final函数声明为非虚函数是不够的呢?还有其他我想念的东西吗?

c++ final c++11

130
推荐指数
8
解决办法
9万
查看次数

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

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

如:

public void foo(int bar) { ... }
Run Code Online (Sandbox Code Playgroud)

与:

public void foo(final int bar) { ... }
Run Code Online (Sandbox Code Playgroud)

假设bar只读取并且从未修改过foo().

java performance final

117
推荐指数
2
解决办法
3万
查看次数

最终静态方法的行为

我一直在玩静态方法的修饰符,并遇到了一个奇怪的行为.

我们知道,静态方法不能被覆盖,因为它们与类而不是实例相关联.

所以,如果我有下面的代码片段,它编译得很好

//Snippet 1 - Compiles fine
public class A {
    static void ts() {
    }
}

class B extends A {
    static void ts() {
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果我在A类中将final修饰符包含到静态方法中,则编译失败 ,B中的ts()不能覆盖A中的ts(); 重写方法是静态最终的.

当静态方法根本无法被覆盖时,为什么会发生这种情况?

java methods static final

117
推荐指数
4
解决办法
4万
查看次数

有效地最终与最终 - 不同的行为

到目前为止,我认为有效的 finalfinal或多或少是等效的,如果在实际行为中不相同,JLS 会将它们相似地对待。然后我发现了这个人为的场景:

final int a = 97;
System.out.println(true ? a : 'c'); // outputs a

// versus

int a = 97;
System.out.println(true ? a : 'c'); // outputs 97
Run Code Online (Sandbox Code Playgroud)

显然,JLS 在这里两者之间产生了重要区别,我不知道为什么。

我阅读了其他主题,例如

但他们没有详细说明。毕竟,在更广泛的层面上,它们似乎几乎是等价的。但深入挖掘,它们显然不同。

是什么导致了这种行为,谁能提供一些解释这一点的 JLS 定义?


编辑:我发现了另一个相关的场景:

final String a = "a";
System.out.println(a + "b" == "ab"); // outputs true

// versus

String a = "a";
System.out.println(a + "b" == "ab"); // outputs false
Run Code Online (Sandbox Code Playgroud)

所以字符串实习在这里的行为也不同(我不想在实际代码中使用这个片段,只是对不同的行为感到好奇)。

java final jls language-lawyer effectively-final

103
推荐指数
2
解决办法
3137
查看次数

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

我曾经认为private val并且private final val相同,直到我在Scala参考中看到4.1节:

形式是常量值定义

final val x = e
Run Code Online (Sandbox Code Playgroud)

其中e是常数表达式(§6.24).必须存在最终修饰符,并且不能给出类型注释.对常量值x的引用本身被视为常量表达式; 在生成的代码中,它们被定义的右侧e替换.

我写了一个测试:

class PrivateVal {
  private val privateVal = 0
  def testPrivateVal = privateVal
  private final val privateFinalVal = 1
  def testPrivateFinalVal = privateFinalVal
}
Run Code Online (Sandbox Code Playgroud)

javap -c 输出:

Compiled from "PrivateVal.scala"
public class PrivateVal {
  public int testPrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #19                 // Method privateVal:()I
       4: ireturn       

  public int testPrivateFinalVal();
    Code:
       0: iconst_1      
       1: ireturn       

  public PrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #24 …
Run Code Online (Sandbox Code Playgroud)

scala final private

97
推荐指数
2
解决办法
2万
查看次数

为什么界面中的所有字段都是隐式静态和最终的?

我只是想了解为什么在接口定义的所有域都默认staticfinal.保持字段的想法static对我来说是有道理的,因为你不能拥有接口的对象,但为什么它们final(隐含地)?

任何人知道为什么Java的设计者在接口使得场去staticfinal

java static final interface language-implementation

94
推荐指数
4
解决办法
9万
查看次数

92
推荐指数
10
解决办法
2万
查看次数

通过反射获取Java中公共静态最终字段/属性的值

说我有一节课:

public class R {
    public static final int _1st = 0x334455;
}
Run Code Online (Sandbox Code Playgroud)

如何通过反射得到字段/属性"_1st"的值?

java reflection static final

86
推荐指数
2
解决办法
8万
查看次数

在Java中使用final变量是否可以改善垃圾收集?

今天,我和我的同事讨论了finalJava中关键字的用法,以改进垃圾收集.

例如,如果您编写如下方法:

public Double doCalc(final Double value)
{
   final Double maxWeight = 1000.0;
   final Double totalWeight = maxWeight * value;
   return totalWeight;  
}
Run Code Online (Sandbox Code Playgroud)

声明方法中的变量final将有助于垃圾收集在方法退出后从方法中未使用的变量清除内存.

这是真的?

java garbage-collection final

82
推荐指数
6
解决办法
5万
查看次数

在Java中,关键字"final","finally"和"finalize"的用途是什么?

在Java中,目的是什么做的关键字final,finallyfinalize履行?

java final finally finalize

82
推荐指数
5
解决办法
10万
查看次数