草庐IT

Final-Metaverse-Fantasy

全部标签

java - 最佳实践 : Java static non final variables

在Java中,什么时候应该使用静态非final变量?例如privatestaticintMY_VAR=0;显然我们在这里不是在谈论常量。publicstaticfinalintMY_CONSTANT=1;根据我的经验,我经常在使用单例时证明它们是合理的,但最终我需要拥有多个实例,这给自己带来了极大的头痛和重构。在实践中似乎很少使用它们。你怎么看? 最佳答案 统计收集可能使用非最终变量,例如计算创建的实例数。另一方面,对于那种情况,您可能无论如何都想使用AtomicLong等,此时它可能是最终的。或者,如果您要收集多个统计信息,您最终

java - 开闭原理及Java "final"修饰符

开闭原则指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。然而,JoshuaBloch在他的名著《EffectiveJava》中给出了以下建议:“设计和记录继承,否则禁止它”,并鼓励程序员使用“final”修饰符来禁止子类化。我认为这两个原则显然相互矛盾(我错了吗?)。您在编写代码时遵循哪个原则,为什么?你是让你的类保持打开状态,不允许继承其中一些(哪些?),还是尽可能使用final修饰符? 最佳答案 坦率地说,我认为开放/封闭原则与其说是不合时宜的,不如说是不合时宜的。这似乎是从80年代和90年代开始的,当时OO框架

java - 开闭原理及Java "final"修饰符

开闭原则指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。然而,JoshuaBloch在他的名著《EffectiveJava》中给出了以下建议:“设计和记录继承,否则禁止它”,并鼓励程序员使用“final”修饰符来禁止子类化。我认为这两个原则显然相互矛盾(我错了吗?)。您在编写代码时遵循哪个原则,为什么?你是让你的类保持打开状态,不允许继承其中一些(哪些?),还是尽可能使用final修饰符? 最佳答案 坦率地说,我认为开放/封闭原则与其说是不合时宜的,不如说是不合时宜的。这似乎是从80年代和90年代开始的,当时OO框架

java - 为什么我们在匿名内部类中使用 final 关键字?

我目前正在准备S(O)CJP,以及Sierra和Bates书。关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回然后尝试访问到堆栈上的这些变量,但由于方法结束后不再存在......众所周知,我们可以通过使用final关键字绕过这一点。这是他们在书中所说的,但他们并没有真正解释final关键字的作用是什么......据我所知,在方法局部变量上使用final关键字并不能让它存在于堆中......那么该类如何能够访问仍然存在于堆栈中的final变量,而可能没有更多的堆栈???我想内部类中应该有这个最终局部变量的某种“副本”。既然值

java - 为什么我们在匿名内部类中使用 final 关键字?

我目前正在准备S(O)CJP,以及Sierra和Bates书。关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回然后尝试访问到堆栈上的这些变量,但由于方法结束后不再存在......众所周知,我们可以通过使用final关键字绕过这一点。这是他们在书中所说的,但他们并没有真正解释final关键字的作用是什么......据我所知,在方法局部变量上使用final关键字并不能让它存在于堆中......那么该类如何能够访问仍然存在于堆栈中的final变量,而可能没有更多的堆栈???我想内部类中应该有这个最终局部变量的某种“副本”。既然值

匿名内部类中的 Java 局部变量可见性 - 为什么需要 'final' 关键字?

我不明白为什么我不能总是从“监听器”或“处理程序”中访问变量。这是我的代码:ButtonbtnDownload=newButton(myparent,SWT.NONE);btnDownload.addSelectionListener(newSelectionAdapter(){@OverridepublicvoidwidgetSelected(SelectionEvente){btnDownload.setEnabled(false);//ICAN'T}});唯一的方法是使用final关键字声明它:finalButtonbtnDownload=newButton(myparent,S

匿名内部类中的 Java 局部变量可见性 - 为什么需要 'final' 关键字?

我不明白为什么我不能总是从“监听器”或“处理程序”中访问变量。这是我的代码:ButtonbtnDownload=newButton(myparent,SWT.NONE);btnDownload.addSelectionListener(newSelectionAdapter(){@OverridepublicvoidwidgetSelected(SelectionEvente){btnDownload.setEnabled(false);//ICAN'T}});唯一的方法是使用final关键字声明它:finalButtonbtnDownload=newButton(myparent,S

java - 测试 final 字段的初始化安全性

我正在尝试简单地测试JLS所保证的最终字段的初始化安全性。这是为了我正在写的一篇论文。但是,根据我当前的代码,我无法让它“失败”。谁能告诉我我做错了什么,或者如果这只是我必须一遍又一遍地运行然后看到一些不幸的时机失败?这是我的代码:publicclassTestClass{finalintx;inty;staticTestClassf;publicTestClass(){x=3;y=4;}staticvoidwriter(){TestClass.f=newTestClass();}staticvoidreader(){if(TestClass.f!=null){inti=TestCla

java - 测试 final 字段的初始化安全性

我正在尝试简单地测试JLS所保证的最终字段的初始化安全性。这是为了我正在写的一篇论文。但是,根据我当前的代码,我无法让它“失败”。谁能告诉我我做错了什么,或者如果这只是我必须一遍又一遍地运行然后看到一些不幸的时机失败?这是我的代码:publicclassTestClass{finalintx;inty;staticTestClassf;publicTestClass(){x=3;y=4;}staticvoidwriter(){TestClass.f=newTestClass();}staticvoidreader(){if(TestClass.f!=null){inti=TestCla

java - java中final局部变量的使用

这个问题在这里已经有了答案:Whywouldonemarklocalvariablesandmethodparametersas"final"inJava?[closed](12个回答)关闭6年前。我想知道使用最终局部变量是否有用。当继承出现时,变量无论如何都不会被覆盖。例如下面的简单代码publicstaticvoidmain(Stringargs[]){finalStringdata="HelloWorld!";System.out.println(data);}这个例子很简单,可能不是相关代码,但问题更笼统。我见过很多代码(所有代码都包含在具有最终局部变量的主函数中)是否有声明局