草庐IT

finalizer

全部标签

java - 为什么 final 是 Java 中局部变量的唯一修饰符?

classTest{publicstaticvoidmain(String[]args){privateintx=10;publicinty=20;protectedintz=30;staticintw=40;finalinti=50;}}此处唯一适用的修饰符是final;对于其他修饰符,程序给出编译器错误。这是为什么?请详细说明。 最佳答案 简而言之-在这种情况下,其他修饰符都没有意义。说一个变量是public、private、protected或static在上下文中根本没有意义一旦方法退出,将超出范围(并被垃圾收集)的局部变量

Java 7 -> Java 8 : AES Causes exception: "BadPaddingException: Given final block not properly padded" in conjunction with BufferedReader & ZipStreams

我们使用以下语句实例化密码:Ciphercipher=Cipher.getInstance("AES");SecretKeySpeckey=newSecretKeySpec(cipherKey,"AES");这在Java7(1.7_45)中有效,但在Java8(1.8_25)中不再有效。我们将cipher传递给CipherInputStream并使用流来读取/写入数据。实际异常发生在close期间。编辑:快速查看JDK代码会发现BadPaddingException被重新抛出,在7中它被忽略了:JDK7:CipherInputStream.close:try{this.cipher.d

java - 关键字 final 对 JVM 有什么影响吗?

这个问题在这里已经有了答案:DoesuseoffinalkeywordinJavaimprovetheperformance?(14个答案)关闭7年前。现在,我最近遇到了一条建议,建议您应尽可能广泛地使用关键字final。这很好,可以防止程序员开枪打自己的腿——也就是说,重新分配不应重新分配的变量。但是,它还有其他目的吗?也就是说,JVM能否使用有关最终变量的信息以某种方式优化字节码,使其运行得更快(构建更好的流水线或在多线程环境中使用它)?或者只是一种语法糖,可以最大限度地减少代码开发过程中出错的可能性?

java - 为什么 Java 的 BigDecimal 类没有声明为 final?

在检查Java的源代码时BigDecimal类,令我惊讶的是它未声明为最终类:ClassBigDecimalpublicclassBigDecimalextendsNumberimplementsComparableImmutable,arbitrary-precisionsigneddecimalnumbers.(来自OracleDocs)这是否有特定原因,或者开发人员只是忘记添加该关键字?不将不可变类声明为final是一种好习惯吗?BigInteger也是如此,但不适用于String这被宣布为最终的。 最佳答案 引自https:

java - 为什么 static final 在每次迭代中都比 new 慢

为什么代码片段A比代码片段B慢14倍?(在Windows764位上使用jdk1.8.0_60测试)代码片段A:importjava.awt.geom.RoundRectangle2D;publicclassTest{privatestaticfinalRoundRectangle2D.DoubleRECTANGLE=newRoundRectangle2D.Double(1,2,3,4,5,6);publicstaticvoidmain(String[]args){intresult=RECTANGLE.hashCode();longstart=System.nanoTime();for

java - 为什么我不能将 final long 分配给 int?

据我了解,变量评估是在运行时完成的。但是,在Java中,类型评估是在编译时完成的。此外,如我所见,将变量设置为常量(我使用的是局部变量,但它对上述概念没有任何改变),将在编译时使其值已知。我为您提供了两个示例来验证这个概念。第一个有效,第二个无效。有人可以向我解释为什么使变量常量允许我将一个short变量分配给一个int变量,而我不能将一个int变量分配给一个long变量吗?//Workingexamplefinalintx=10;shorty=x;//Non-workingexamplefinallonga=10L;intb=a; 最佳答案

java - 为什么 Java 8 中的 lambda 表达式要求其内部使用的变量使用 "final"修饰符,但在使用方法引用时却不需要?

这个问题在这里已经有了答案:Whycanmethodreferenceusenon-finalvariables?(4个答案)关闭去年。考虑以下类(class):classFoo{voidhandle(Tt){System.out.println("handling"+t);}publicstaticvoidmain(String[]args){Listlist=newArrayList();list.add(1);list.add(2);Foof=newFoo();list.forEach(f::handle);//compilesfine//list.forEach(obj->f.

java - 如何将 catch finally 重组为 Java 8 中的一种方法?

Java8的新手,我想优化我的代码如下:publicResponsecreate(){try{...}catch(Exceptione){codeA;}finally{codeB;}}publicResponseupdate(){try{...}catch(Exceptione){codeA;}finally{codeB;}}我有很多方法使用相同的方式来捕获异常并最终执行相同的操作,是否可以用Java8中的方法替换下面的通用代码?这样我就可以优化使用此公共(public)代码的所有方法。}catch(Exceptione){codeA;}finally{codeB;}

java - 为什么要使 private static final Lists/Sets/Maps 不可修改?

我刚刚阅读了一位更有经验的程序员编写的一些代码,我遇到了以下问题:publicclassConsoleFormatterextendsFormatter{privatestaticfinalMapPREFIXES;static{Mapprefixes=newHashMap();prefixes.put(Level.CONFIG,"[config]");prefixes.put(Level.FINE,"[debug]");prefixes.put(Level.FINER,"[debug]");prefixes.put(Level.FINEST,"[trace]");prefixes.pu

java - 使用父类(super class) "protected final"方法为子类保留公共(public)代码

作为一个(迂腐的)初学者Java程序员,我想知道,将所有子类使用的公共(public)代码块移动到单独的protected(final)父类中的方法?诸如用通用值填充列表或通用过滤算法等任务...是否也可以使用protected静态方法?classA{protectedfinalListgetVariants(){...}protectedfinalListfilterResults(Listvariants){...}}classBextendsA{publicListdoSomethingUsefull(){ListcommonVariants=getVariants();...r