Tag: 最终

为什么最终关键字对于不可变类是必要的?

您能否澄清一下,为什么在课堂上我们将最终关键字作为不可变关键字时需要它。 我的意思是,如果我们将所有属性声明为private和final,那么它也是一个不可变类,不是吗? 对不起,如果问题看似简单,但我真的很困惑。 帮帮我。 编辑:我知道一个声明为final的类不能被子类化。但是如果每个属性都是私有的,那么最终会有什么区别呢?

在Java中,为什么我不能在父类中声明最终成员(没有初始化它)并在子类中设置它的值? 我该如何解决?

在Java程序中,我有多个从父类inheritance的子类(它是抽象的)。 我想表达的是,每个孩子都应该有一个只设置一次的成员(我打算从构造函数中做到这一点)。 我的计划是编码s.th. 喜欢这个: public abstract class Parent { protected final String birthmark; } public class Child extends Parent { public Child(String s) { this.birthmark = s; } } 然而,这似乎不能取悦Java神。 在父类中,我得到birthmark “可能尚未初始化”的消息,在子类中我得到“无法访问最终字段birthmark ”。 那么Java的方式是什么呢? 我错过了什么?

编译时代码中是否替换了Java静态最终值?

在java中,说我有以下内容 ==fileA.java== class A { public static final int SIZE = 100; } 然后在另一个文件中我使用此值 ==fileB.java== import A; class b { Object[] temp = new Object[A.SIZE]; } 当这个被编译时, SIZE被替换为值100,所以如果我要在路上替换FileA.jar而不是FileB.jar,对象数组会获得新值,还是硬编码为100,因为那样它最初建造时的价值? 谢谢, 斯蒂芬妮

测试最终字段的初始化安全性

我试图简单地测试JLS保证的最终字段的初始化安全性。 这是我写的一篇论文。 但是,根据我当前的代码,我无法让它“失败”。 有人可以告诉我我做错了什么,或者这只是我必须反复运行然后看到一个不幸的时机失败? 这是我的代码: public class TestClass { final int x; int y; static TestClass f; public TestClass() { x = 3; y = 4; } static void writer() { TestClass.f = new TestClass(); } static void reader() { if (TestClass.f != null) { int i = TestClass.fx; // guaranteed to see 3 int […]

编译时常量和变量

Java语言文档说: 如果将基本类型或字符串定义为常量并且在编译时已知该值,则编译器会将代码中的常量名称替换为其值。 这称为编译时常量。 我的理解是,如果我们有一段代码: private final int x = 10; 然后,编译器将用文字10替换代码中每次出现的x 。 但假设常量在运行时初始化: private final int x = getX(); // here getX() returns an integer value at run-time. 与编译时常量相比,是否会出现性能下降(无论可能忽略不计)? 另一个问题是以下代码行: private int y = 10; // here y is not final 编译器以与编译时常量相同的方式处理? 最后,我从答案中理解的是: final static表示编译时常量 just final意味着它是一个常量但在运行时初始化 只是static意味着在运行时初始化 没有final是一个变量,不会被视为常量。 我的理解是否正确?