草庐IT

Final-Metaverse-Fantasy

全部标签

java - 为什么 Java 原始类型的修饰符是 public、abstract 和 final?

在对Java类型进行一些反射(reflection)的过程中,我遇到了一个我不理解的奇怪现象。检查int的修饰符会返回public、abstract和final。我了解public和final,但是对于原始类型,abstract的存在对我来说并不明显。为什么会这样?编辑:我不是在反射(reflect)Integer而是在int:importjava.lang.reflect.Modifier;publicclassIntegerReflection{publicstaticvoidmain(finalString[]args){System.out.println(String.for

java - Java 'final' 关键字是否真的提高了安全性?

虽然有manyreasonstousethe'final'keywordinJava,我一遍又一遍地听到的其中一个是它使您的代码更安全。虽然在这个微不足道的情况下这似乎是有道理的:publicclassPassword{publicfinalStringpasswordHash;...}使用final关键字,您会认为没有恶意代码能够更改变量passwordHash。但是,usingreflection可以更改passwordHash字段的final修饰符。那么“最终”是否提供任何真正的安全性,还是只是安慰剂?编辑:有一些非常有趣的讨论,我希望我能接受多个答案。感谢大家的意见。

java - Java 'final' 关键字是否真的提高了安全性?

虽然有manyreasonstousethe'final'keywordinJava,我一遍又一遍地听到的其中一个是它使您的代码更安全。虽然在这个微不足道的情况下这似乎是有道理的:publicclassPassword{publicfinalStringpasswordHash;...}使用final关键字,您会认为没有恶意代码能够更改变量passwordHash。但是,usingreflection可以更改passwordHash字段的final修饰符。那么“最终”是否提供任何真正的安全性,还是只是安慰剂?编辑:有一些非常有趣的讨论,我希望我能接受多个答案。感谢大家的意见。

java - 为什么 "final static int"可以用作开关的大小写常数,但不能用作 "final static <your enum>"

为什么这个int开关有效:publicclassFoo{privatefinalstaticintONE=1;privatefinalstaticintTWO=2;publicstaticvoidmain(String[]args){intvalue=1;switch(value){caseONE:break;caseTWO:break;}}}虽然这个枚举开关不是:importjava.lang.annotation.RetentionPolicy;publicclassFoo{privatefinalstaticRetentionPolicyRT=RetentionPolicy.RU

java - 为什么 "final static int"可以用作开关的大小写常数,但不能用作 "final static <your enum>"

为什么这个int开关有效:publicclassFoo{privatefinalstaticintONE=1;privatefinalstaticintTWO=2;publicstaticvoidmain(String[]args){intvalue=1;switch(value){caseONE:break;caseTWO:break;}}}虽然这个枚举开关不是:importjava.lang.annotation.RetentionPolicy;publicclassFoo{privatefinalstaticRetentionPolicyRT=RetentionPolicy.RU

java - "final"在运行时是最终的吗?

我一直在玩ASM,并且我相信我成功地将final修饰符添加到类的实例字段中;但是,然后我继续实例化所述类并在其上调用setter,这成功地更改了now-final字段的值。我的字节码更改是否有问题,还是最终仅由Java编译器强制执行?更新:(7月31日)这里有一些代码供您引用。主要部分是一个带有privateintx和privatefinalinty的简单POJO,MakeFieldsFinalClassAdapter,它使得它访问的每个字段都是最终的,除非它已经是最终的,和AddSetYMethodVisitor,它会导致POJO的setX()方法也将y设置为与设置x相同的值。换句话

java - "final"在运行时是最终的吗?

我一直在玩ASM,并且我相信我成功地将final修饰符添加到类的实例字段中;但是,然后我继续实例化所述类并在其上调用setter,这成功地更改了now-final字段的值。我的字节码更改是否有问题,还是最终仅由Java编译器强制执行?更新:(7月31日)这里有一些代码供您引用。主要部分是一个带有privateintx和privatefinalinty的简单POJO,MakeFieldsFinalClassAdapter,它使得它访问的每个字段都是最终的,除非它已经是最终的,和AddSetYMethodVisitor,它会导致POJO的setX()方法也将y设置为与设置x相同的值。换句话

java - 了解此警告 : The serializable class does not declare a static final serialVersionUID

我有一些静态初始化代码:someMethodThatTakesAHashMap(newHashMap(){{put("a","value-a");put("c","value-c");}});由于某种原因,我收到了来自Eclipse的警告:可序列化类未声明静态最终serialVersionUID。这是在提示匿名类吗?我能做些什么呢,或者我应该压制它。 最佳答案 您使用的语法称为double-braceinitialization-这实际上是一个“instanceinitializationblock是anonymousinnercl

java - 了解此警告 : The serializable class does not declare a static final serialVersionUID

我有一些静态初始化代码:someMethodThatTakesAHashMap(newHashMap(){{put("a","value-a");put("c","value-c");}});由于某种原因,我收到了来自Eclipse的警告:可序列化类未声明静态最终serialVersionUID。这是在提示匿名类吗?我能做些什么呢,或者我应该压制它。 最佳答案 您使用的语法称为double-braceinitialization-这实际上是一个“instanceinitializationblock是anonymousinnercl

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

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