草庐IT

final_msg

全部标签

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

ICPC World Finals 2020 ‘S No Problem (树形dp) (k 条不相交路径覆盖最值问题)

TP题意:用两条线(可以来回走,可以相交,不要求是简单路径)覆盖一颗树,花费为每条边被覆盖的次数乘边权之和。问覆盖这棵树的最小花费是多少?思路:首先转换一下问题,从任意一个点出发,我们一定能每条边经过两次(标记两次)再回到该点。这样花费的上界就是两倍的边权和。之后我们再用线(不是题意里的线了)去消除标记,可以发现,经过一条边相当于把该边的标记-1,一条边的标记至少为1(不然就不是覆盖这棵树了),这样的线走过的一定是简单路径,如果用两条的话,这两条线一定不会有公共边(否则一条边的标记就会减2)。致此问题就转换成,如何用两条不公共的简单路径最大化走过的权值。最后答案就是两倍边权和-该最大化值,也就

java - 关于嵌套 Java try/finally 代码三明治的建议

我想要一些关于我碰到的技术的建议。通过查看代码片段可以很容易地理解它,但我会在下面的段落中更多地记录它。使用“代码三明治”习语来处理资源管理是司空见惯的。习惯了C++的RAII习语后,我切换到Java,发现我的异常安全资源管理导致代码深度嵌套,在其中我很难掌握常规控制流。显然(javadataaccess:isthisgoodstyleofjavadataaccesscode,orisittoomuchtryfinally?、Javaiouglytry-finallyblock等等)我并不孤单。我尝试了不同的解决方案来解决这个问题:显式维护程序状态:resource1aquired、f

java - 关于嵌套 Java try/finally 代码三明治的建议

我想要一些关于我碰到的技术的建议。通过查看代码片段可以很容易地理解它,但我会在下面的段落中更多地记录它。使用“代码三明治”习语来处理资源管理是司空见惯的。习惯了C++的RAII习语后,我切换到Java,发现我的异常安全资源管理导致代码深度嵌套,在其中我很难掌握常规控制流。显然(javadataaccess:isthisgoodstyleofjavadataaccesscode,orisittoomuchtryfinally?、Javaiouglytry-finallyblock等等)我并不孤单。我尝试了不同的解决方案来解决这个问题:显式维护程序状态:resource1aquired、f

java - 为什么 Java 编译器复制 finally block ?

当使用简单的try/finallyblock编译以下代码时,Java编译器会生成以下输出(在ASM字节码查看器中查看):代码:try{System.out.println("Attemptingtodividebyzero...");System.out.println(1/0);}finally{System.out.println("Finally...");}字节码:TRYCATCHBLOCKL0L1L1L0LINENUMBER10L0GETSTATICjava/lang/System.out:Ljava/io/PrintStream;LDC"Attemptingtodivide

java - 为什么 Java 编译器复制 finally block ?

当使用简单的try/finallyblock编译以下代码时,Java编译器会生成以下输出(在ASM字节码查看器中查看):代码:try{System.out.println("Attemptingtodividebyzero...");System.out.println(1/0);}finally{System.out.println("Finally...");}字节码:TRYCATCHBLOCKL0L1L1L0LINENUMBER10L0GETSTATICjava/lang/System.out:Ljava/io/PrintStream;LDC"Attemptingtodivide