classTest{publicstaticvoidmain(String[]args){privateintx=10;publicinty=20;protectedintz=30;staticintw=40;finalinti=50;}}此处唯一适用的修饰符是final;对于其他修饰符,程序给出编译器错误。这是为什么?请详细说明。 最佳答案 简而言之-在这种情况下,其他修饰符都没有意义。说一个变量是public、private、protected或static在上下文中根本没有意义一旦方法退出,将超出范围(并被垃圾收集)的局部变量
我们使用以下语句实例化密码: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
这个问题在这里已经有了答案:DoesuseoffinalkeywordinJavaimprovetheperformance?(14个答案)关闭7年前。现在,我最近遇到了一条建议,建议您应尽可能广泛地使用关键字final。这很好,可以防止程序员开枪打自己的腿——也就是说,重新分配不应重新分配的变量。但是,它还有其他目的吗?也就是说,JVM能否使用有关最终变量的信息以某种方式优化字节码,使其运行得更快(构建更好的流水线或在多线程环境中使用它)?或者只是一种语法糖,可以最大限度地减少代码开发过程中出错的可能性?
在检查Java的源代码时BigDecimal类,令我惊讶的是它未声明为最终类:ClassBigDecimalpublicclassBigDecimalextendsNumberimplementsComparableImmutable,arbitrary-precisionsigneddecimalnumbers.(来自OracleDocs)这是否有特定原因,或者开发人员只是忘记添加该关键字?不将不可变类声明为final是一种好习惯吗?BigInteger也是如此,但不适用于String这被宣布为最终的。 最佳答案 引自https:
为什么代码片段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中,类型评估是在编译时完成的。此外,如我所见,将变量设置为常量(我使用的是局部变量,但它对上述概念没有任何改变),将在编译时使其值已知。我为您提供了两个示例来验证这个概念。第一个有效,第二个无效。有人可以向我解释为什么使变量常量允许我将一个short变量分配给一个int变量,而我不能将一个int变量分配给一个long变量吗?//Workingexamplefinalintx=10;shorty=x;//Non-workingexamplefinallonga=10L;intb=a; 最佳答案
这个问题在这里已经有了答案: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.
Java8的新手,我想优化我的代码如下:publicResponsecreate(){try{...}catch(Exceptione){codeA;}finally{codeB;}}publicResponseupdate(){try{...}catch(Exceptione){codeA;}finally{codeB;}}我有很多方法使用相同的方式来捕获异常并最终执行相同的操作,是否可以用Java8中的方法替换下面的通用代码?这样我就可以优化使用此公共(public)代码的所有方法。}catch(Exceptione){codeA;}finally{codeB;}
我刚刚阅读了一位更有经验的程序员编写的一些代码,我遇到了以下问题: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程序员,我想知道,将所有子类使用的公共(public)代码块移动到单独的protected(final)父类中的方法?诸如用通用值填充列表或通用过滤算法等任务...是否也可以使用protected静态方法?classA{protectedfinalListgetVariants(){...}protectedfinalListfilterResults(Listvariants){...}}classBextendsA{publicListdoSomethingUsefull(){ListcommonVariants=getVariants();...r