草庐IT

Try-finally

全部标签

java - 使用 final 字段的成本

我们知道将字段设为final通常是一个好主意,因为我们获得了线程安全性和不变性,这使得代码更易于推理。我很好奇是否有相关的性能成本。Java内存模型保证finalFieldSemantics:Athreadthatcanonlyseeareferencetoanobjectafterthatobjecthasbeencompletelyinitializedisguaranteedtoseethecorrectlyinitializedvaluesforthatobject'sfinalfields.这意味着对于这样的类classX{X(inta){this.a=a;}finalint

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 原始类型的修饰符是 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 - 使用 try-with-resources 时是否需要调用 flush()

try-with-resources会隐式调用flush()吗?如果是这样,在下面的代码片段中,bw.flush()可以安全删除吗?staticvoidprintToFile1(Stringtext,Filefile){try(BufferedWriterbw=newBufferedWriter(newFileWriter(file))){bw.write(text);bw.flush();}catch(IOExceptionex){//handleex}}ps。我在官方文档中没有看到任何关于它的描述:https://docs.oracle.com/javase/tutorial/es

java - 使用 try-with-resources 时是否需要调用 flush()

try-with-resources会隐式调用flush()吗?如果是这样,在下面的代码片段中,bw.flush()可以安全删除吗?staticvoidprintToFile1(Stringtext,Filefile){try(BufferedWriterbw=newBufferedWriter(newFileWriter(file))){bw.write(text);bw.flush();}catch(IOExceptionex){//handleex}}ps。我在官方文档中没有看到任何关于它的描述:https://docs.oracle.com/javase/tutorial/es

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 - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?

例如,这样更好吗?try{synchronized(bean){//Writesomething}}catch(InterruptedExceptione){//Writesomething}或者这样更好:synchronized(bean){try{//Writesomething}catch(InterruptedExceptione){//Writesomething}}我想知道哪一个是最佳实践。显然考虑到我必须同步tryblock内的所有代码。我不是在谈论我只需要同步try内的部分代码的情况(在这种情况下,我认为在try内有同步块(synchronizedblock)会更好)。

java - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?

例如,这样更好吗?try{synchronized(bean){//Writesomething}}catch(InterruptedExceptione){//Writesomething}或者这样更好:synchronized(bean){try{//Writesomething}catch(InterruptedExceptione){//Writesomething}}我想知道哪一个是最佳实践。显然考虑到我必须同步tryblock内的所有代码。我不是在谈论我只需要同步try内的部分代码的情况(在这种情况下,我认为在try内有同步块(synchronizedblock)会更好)。

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