代码之家  ›  专栏  ›  技术社区  ›  Nosrama

在Java中,Java的最终结果是什么?

  •  519
  • Nosrama  · 技术社区  · 17 年前

    Java的等价物是什么? final 在C?

    7 回复  |  直到 8 年前
        1
  •  810
  •   James Wierzba    9 年前

    这个 final 关键字在Java中有几种用法。它对应于 sealed readonly C中的关键字,取决于使用它的上下文。

    要防止子类化(从定义的类继承):

    爪哇

    public final class MyFinalClass {...}
    

    C.*

    public sealed class MyFinalClass {...}
    

    方法

    防止覆盖 virtual 方法。

    爪哇

    public class MyClass
    {
        public final void myFinalMethod() {...}
    }
    

    C.*

    public class MyClass : MyBaseClass
    {
        public sealed override void MyFinalMethod() {...}
    }
    

    正如约阿希姆·绍尔指出的,这两种语言之间的显著区别在于Java默认地将所有非静态方法标记为 事实上的 ,而C将其标记为 密封的 . 因此,您只需要使用 密封的 如果要停止对已显式标记的方法的进一步重写,请使用C中的关键字 事实上的 在基类中。

    变量

    只允许变量分配一次:

    爪哇

    public final double pi = 3.14; // essentially a constant
    

    C.*

    public readonly double pi = 3.14; // essentially a constant
    

    作为旁注, 只读 关键字不同于 const 关键字中的 只读 表达式的计算位置为 运行时 而不是 编译时间 从而允许任意表达式。

        2
  •  162
  •   LukeH    17 年前

    这取决于上下文。

        3
  •  40
  •   Some guy    16 年前

    这里每个人缺少的是Java对最终成员变量的明确分配的保证。

    对于具有最终成员变量v的C类,通过C的每个构造函数的每个可能的执行路径都必须精确地分配v一次-未能分配v或分配v两次或两次以上将导致错误。

    C的readonly关键字没有这样的保证-编译器非常乐意不分配readonly成员,或者允许您在构造函数中多次分配它们。

    所以,final和readonly(至少在成员变量方面)绝对不是等价的——final要严格得多。

        4
  •  6
  •   Vijayakumarpl    17 年前

    JAVA类的最终和方法最终-密封。 JAVA成员变量Test-&G.为运行时常数只读,const为编译时常数。

    局部变量final和方法参数final没有等价项

        5
  •  6
  •   Vlasec    11 年前

    如上所述, sealed 相当于 final 用于方法和类。

    至于其他的,这是复杂的。

    • 在声明中定义的(静态)常量上, const 如果是基元类型或不可变类,则可以将其视为等效类。
    • 在一个一旦离开构造函数就不应该重新分配的字段上, readonly 可以使用,但不等于- 最终的 即使在构造函数中也只需要一个赋值。
    • 我想,一个应该只分配一次的局部变量不能在C中创建。如果您想知道为什么会有人需要它:您可以在某些if-else之前声明一个变量, switch-case 左右。通过将其声明为final,可以强制它只分配一次,如果没有,则会发生编译器错误。这需要行为良好的代码,因此错误较少。

    综上所述,c没有直接等价于 最终的 . 虽然Java缺少一些很好的C语言特性,但对于我来说,大多数Java程序员都能看到C语言无法传递等效的内容。

        6
  •  5
  •   Krzysztof Krasoń    17 年前

    http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations

    C常量使用const关键字声明编译时常量,或使用readonly关键字声明运行时常量。在C语言和Java语言中,常数的语义是相同的。

        7
  •  0
  •   x2. alexey    17 年前

    密封的

    推荐文章