在Java中,为什么最好声明一个记录器staticfinal?privatestaticfinalLoggerS_LOGGER 最佳答案 private-这样没有其他类可以劫持您的记录器static-因此每个类只有一个记录器实例,同时也避免尝试序列化记录器final-在类的生命周期内无需更改记录器另外,我更喜欢名称log尽可能简单,但具有描述性。编辑:但是,这些规则有一个有趣的异常(exception):protectedfinalLoggerlog=LoggerFactory.getLogger(getClass());相对于:p
我正在审查一些新代码。该程序只有一个try和一个finallyblock。由于排除了catchblock,如果tryblock遇到异常或任何可抛出的东西,它是如何工作的?是直接进入finallyblock吗? 最佳答案 如果tryblock中的任何代码可以抛出已检查异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常,它就会从方法中冒出来。finallyblock总是被执行,无论是否抛出异常。 关于JavaTryCatchfinally没有Catch的block,我们
即使执行了catchblock并抛出了第二个异常,在这段代码中是否会设置someVar?publicvoidsomeFunction()throwsException{try{//CODEHERE}catch(Exceptione){Log.e(TAG,"",e);thrownewException(e);}finally{this.someVar=true;}} 最佳答案 是的,finallyblock总是运行...除非:运行try-catch-finallyblock的线程被杀死或中断你使用System.exit(0);底层虚拟
在C#和Java(可能还有其他语言)中,在“try”block中声明的变量不在相应的“catch”或“finally”block的范围内。例如,以下代码无法编译:try{Strings="test";//(morecode...)}catch{Console.Out.WriteLine(s);//Javafans:think"System.out.println"hereinstead}在此代码中,catchblock中对s的引用会发生编译时错误,因为s仅在tryblock的范围内。(在Java中,编译错误是“scannotberesolved”;在C#中,是“Thename's'do
我有一个简单的Java类,如下所示:publicclassTest{privateStrings;publicStringfoo(){try{s="dev";returns;}finally{s="overridevariables";System.out.println("EntryinfinallyBlock");}}publicstaticvoidmain(String[]xyz){Testobj=newTest();System.out.println(obj.foo());}}这段代码的输出是这样的:EntryinfinallyBlockdev为什么s没有在finallybl
我发现了一些建议尽可能使用final的引用资料(forexample),我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是final方法或类。对于常量,这显然是有意义的。一方面,编译器可以进行一些优化,让程序员的意图更加清晰。另一方面,它增加了冗长,优化可能是微不足道的。这是我应该努力记住的吗? 最佳答案 沉迷于:Final字段-将字段标记为final会强制它们在构造结束时设置,使该字段引用不可变。这允许安全地发布字段,并且可以避免在以后读取时需要同步。(请注意,对于对象引用,只有字段引用是不可变的-对象引用所引用的
我最近惊讶地发现,在Java的finallyblock中可以有一个return语句。似乎很多人认为按照“Don'treturninafinallyclause”中所述的那样做是一件坏事。'。再深入一点,我还发现了'Java'sreturndoesn'talways'展示了finallyblock中其他类型的流控制的一些非常可怕的例子。所以,我的问题是,谁能给我一个示例,让finallyblock中的return语句(或其他流控制)产生更好/更易读的代码? 最佳答案 几年前我很难找到一个由此引起的错误。代码类似于:Objectprob
这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个回答)关闭4年前。我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?附:我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。附言如果有人需要我的代码,就在这里:importjava.awt.*;importjavax.swing.*;publicclassHelloWorldSwingextendsJFrame{JTextAream_resultArea=ne
我不确定为什么我们在try...except...finally语句中需要finally。在我看来,这个代码块try:run_code1()exceptTypeError:run_code2()other_code()使用finally与这个相同:try:run_code1()exceptTypeError:run_code2()finally:other_code()我错过了什么吗? 最佳答案 如果你早点回来会有所不同:try:run_code1()exceptTypeError:run_code2()returnNone#The
C++11中final关键字的作用是什么?我知道它可以防止派生类覆盖函数,但如果是这种情况,那么将final函数声明为非虚拟还不够吗?我还有什么遗漏的吗? 最佳答案 正如idljarn在评论中已经提到的那样,您缺少的是,如果您从基类中覆盖一个函数,那么您不可能将其标记为非虚拟:structbase{virtualvoidf();};structderived:base{voidf()final;//virtualasitoverridesbase::f};structmostderived:derived{//voidf();//e