草庐IT

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 - 为什么我们不能通过类名在静态 block 中设置静态最终变量的值

这个问题在这里已经有了答案:Whyisn'taqualifiedstaticfinalvariableallowedinastaticinitializationblock?(2个回答)关闭7年前。例如,考虑下面的代码快照:publicstaticfinalinta;publicstaticfinalintb;static{a=8;//it'sworkingTest.b=10;//compilationerrorTest.bcannotbeassigned.}为什么我们不能在Test类本身的静态block中使用Test.b=10;?如果没有类名,它可以正常工作。这背后有什么原因吗?

java - 为什么我们不能通过类名在静态 block 中设置静态最终变量的值

这个问题在这里已经有了答案:Whyisn'taqualifiedstaticfinalvariableallowedinastaticinitializationblock?(2个回答)关闭7年前。例如,考虑下面的代码快照:publicstaticfinalinta;publicstaticfinalintb;static{a=8;//it'sworkingTest.b=10;//compilationerrorTest.bcannotbeassigned.}为什么我们不能在Test类本身的静态block中使用Test.b=10;?如果没有类名,它可以正常工作。这背后有什么原因吗?

java - 为什么 Arrays.binarySearch 与遍历数组相比没有提高性能?

我尝试解决HackerlandRadioTransmittersprogrammingchallange.总而言之,挑战如下:Hackerlandisaone-dimensionalcitywithnhouses,whereeachhouseiislocatedatsomexionthex-axis.TheMayorwantstoinstallradiotransmittersontheroofsofthecity'shouses.Eachtransmitterhasarange,k,meaningitcantransmitasignaltoallhouses≤kunitsofdist

java - 为什么 Arrays.binarySearch 与遍历数组相比没有提高性能?

我尝试解决HackerlandRadioTransmittersprogrammingchallange.总而言之,挑战如下:Hackerlandisaone-dimensionalcitywithnhouses,whereeachhouseiislocatedatsomexionthex-axis.TheMayorwantstoinstallradiotransmittersontheroofsofthecity'shouses.Eachtransmitterhasarange,k,meaningitcantransmitasignaltoallhouses≤kunitsofdist

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

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