草庐IT

java - 在 Java 中对变量使用 final 会改善垃圾收集吗?

今天我和我的同事讨论了在Java中使用final关键字来改进垃圾收集。例如,如果您编写一个方法,例如:publicDoubledoCalc(finalDoublevalue){finalDoublemaxWeight=1000.0;finalDoubletotalWeight=maxWeight*value;returntotalWeight;}在方法final中声明变量将有助于垃圾回收在方法退出后从方法中未使用的变量中清理内存。这是真的吗? 最佳答案 这里有一个稍微不同的例子,一个带有最终引用类型的字段而不是最终值类型的局部变量:

java - Java 修饰符(abstract、final、public、static 等)的合理顺序是什么?

Java修饰符的合理顺序是什么?摘要最终原生私有(private)的protected公开静态strictfp同步transient易变更新我已将措辞从推荐更改为合理,以平息是否推荐订单的讨论。 最佳答案 JavaLanguageSpecification中提到了修饰符的习惯使用顺序。(而不是Java虚拟机规范)例如对于classmodifiers你会发现以下定义(摘录):ClassModifiers:ClassModifierClassModifiersClassModifierClassModifier:oneofAnnotat

java - 为什么我们将 Loggers 声明为 static final?

在Java中,为什么最好声明一个记录器staticfinal?privatestaticfinalLoggerS_LOGGER 最佳答案 private-这样没有其他类可以劫持您的记录器static-因此每个类只有一个记录器实例,同时也避免尝试序列化记录器final-在类的生命周期内无需更改记录器另外,我更喜欢名称log尽可能简单,但具有描述性。编辑:但是,这些规则有一个有趣的异常(exception):protectedfinalLoggerlog=LoggerFactory.getLogger(getClass());相对于:p

java - 什么时候应该使用 final 作为方法参数和局部变量?

我发现了一些建议尽可能使用final的引用资料(forexample),我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是final方法或类。对于常量,这显然是有意义的。一方面,编译器可以进行一些优化,让程序员的意图更加清晰。另一方面,它增加了冗长,优化可能是微不足道的。这是我应该努力记住的吗? 最佳答案 沉迷于:Final字段-将字段标记为final会强制它们在构造结束时设置,使该字段引用不可变。这允许安全地发布字段,并且可以避免在以后读取时需要同步。(请注意,对于对象引用,只有字段引用是不可变的-对象引用所引用的

java - : The serializable class does not declare a static final serialVersionUID field?是什么意思

这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个回答)关闭4年前。我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?附:我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。附言如果有人需要我的代码,就在这里:importjava.awt.*;importjavax.swing.*;publicclassHelloWorldSwingextendsJFrame{JTextAream_resultArea=ne

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

C++11中final关键字的作用是什么?我知道它可以防止派生类覆盖函数,但如果是这种情况,那么将final函数声明为非虚拟还不够吗?我还有什么遗漏的吗? 最佳答案 正如idljarn在评论中已经提到的那样,您缺少的是,如果您从基类中覆盖一个函数,那么您不可能将其标记为非虚拟:structbase{virtualvoidf();};structderived:base{voidf()final;//virtualasitoverridesbase::f};structmostderived:derived{//voidf();//e

java - 是否应该以大写形式声明 "static final Logger"?

在Java中,静态最终变量是常量,并且约定它们应该大写。但是,我看到大多数人以小写形式声明记录器,这在PMD中被视为违规。.例如:privatestaticfinalLoggerlogger=Logger.getLogger(MyClass.class);只需搜索google或SO对于“静态最终记录器”,您将自己看到。我们应该改用LOGGER吗? 最佳答案 记录器引用不是常量,而是最终引用,不应大写。常量VALUE应为大写。privatestaticfinalLoggerlogger=Logger.getLogger(MyClass

java - 为什么 Java 8 接口(interface)方法中不允许出现 "final"?

Java8最有用的特性之一是接口(interface)上的新default方法。引入它们的原因主要有两个(可能还有其他原因):提供实际的默认实现。示例:Iterator.remove()允许JDKAPI演进。示例:Iterable.forEach()从API设计者的角度来看,我希望能够在接口(interface)方法上使用其他修饰符,例如最终。这在添加便捷方法时很有用,可以防止在实现类中“意外”覆盖:interfaceSender{//Conveniencemethodtosendanemptymessagedefaultfinalvoidsend(){send(null);}//Im

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

在Java中,我们看到很多地方可以使用final关键字,但它的使用并不常见。例如:Stringstr="abc";System.out.println(str);在上述情况下,str可以是final,但这通常被忽略。当一个方法永远不会被覆盖时,我们可以使用final关键字。类似地,对于不会被继承的类。在任何或所有这些情况下使用final关键字真的可以提高性能吗?如果是这样,那怎么办?请解释。如果正确使用final确实对性能很重要,那么Java程序员应该养成哪些习惯来充分利用关键字? 最佳答案 通常不会。对于虚拟方法,HotSpot会

java - 为什么要在 Java 中的方法参数上使用关键字 "final"?

我不明白final关键字在用于方法参数时真正在哪里很方便。如果我们排除匿名类的使用、可读性和意图声明,那么对我来说几乎毫无值(value)。强制某些数据保持不变并不像看起来那么强大。如果参数是一个原始参数,那么它将不起作用,因为参数作为值传递给方法,并且更改它不会在范围之外产生任何影响。如果我们通过引用传递参数,那么引用本身就是一个局部变量,如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。考虑下面的简单测试示例。尽管该方法更改了给它的引用的值,但该测试通过了,但没有任何效果。publicvoidtestNullify(){Collectionc=newArrayList()