草庐IT

finalizer

全部标签

java - 使用 try-catch-finally 的 Java 7 try-with-resources 字节码是什么?

我试图了解新的try-with-resourcesstatement通过使用常规的try-catch-finally语句重新创建它来工作。给定以下使用Java7try-with-resources的测试类:importjava.io.IOException;importjava.util.zip.GZIPOutputStream;publicclassTryWithResources{publicstaticvoidmain(String[]args){try(GZIPOutputStreamgzip=newGZIPOutputStream(System.out)){gzip.writ

java - JVM如何保证finally block 的执行?

这个问题的目的是JVM如何能够保证finallyblock的执行(前提是JVM没有崩溃并且线程没有中断或退出)。在一个面试问题的提示下,我试图了解JVM如何确保即使在奇怪的情况下也能执行finallyblock......请考虑以下代码:try{int[]someArray=newint[10];intinvalid=someArray[10];}catch(IndexOutOfBoundsExceptione){thrownewRuntimeException("OtherException");}finally{//closeopenfilesorHTTPconnectionset

java - 声明变量 final 和 static

此评论是在代码审查中发表的,发表评论的人已不在我们的团队中。Anytypethatmustberesolvedbytheclassloaderatruntimeshouldneverhaveinstanceswhichareheldbyreferencesdeclaredtobebothfinalandstatic.这是代码行:privatefinalstaticLoggerlog=LoggerFactory.getLogger(MyClass.class);我对声明记录器静态或非静态的争论很熟悉,但这个评论似乎更笼统。我找不到任何关于为什么static和final不好的解释。谁能详细

java - 什么是先到的 - finally 还是 catch block ?

考虑以下测试用例:publicclassMain{staticinta=0;publicstaticvoidmain(String[]args){try{test();System.out.println("---");test2();}catch(Exceptione){System.out.println(a+":outercatch");a++;}}publicstaticvoidtest(){try{thrownewException();}catch(Exceptione){System.out.println(a+":innercatch");a++;}finally{Sy

java - 在 Java 中,是否保证调用 "finally" block (在 main 方法中)?

我是Java菜鸟,我想知道是否有以下典型的Java代码publicclassMyApp{publicstaticvoidmain(String[]args){try{//dostuff}catch{//handleerrors}finally{//cleanupconnectionsetc.}}}JVM是否保证finallyblock将始终运行?为了理解我从哪里来,我已经习惯了C/C++程序,如果你取消引用一个NULL指针并且你不能在此之后运行任何代码,那么这些程序可能会崩溃。但据我了解Java和整个GC/托管内存业务,没有空指针取消引用之类的东西,一切都是可捕获的预期,因此我的程序实

java - 如何测试实用程序项目的 final方法和静态方法?

我正在尝试为一个项目实现单元测试,它使用一个遗留的“实用程序”项目,其中散布着静态方法,并且许多类是最终的,或者它们的方法是最终的。我根本无法更新旧项目。JMock和EasyMock都对final方法感到窒息,而且我看不到测试静态调用的好方法。有什么技术可以测试这些? 最佳答案 如果您能够重构代码,则可以将您对最终/静态方法的调用包装在简单的实例方法中,例如:protectedFoodoBar(Stringname){returnUtility.doBar(name);}这允许您在单元测试中覆盖包装器方法以返回Foo的模拟实例。您也

java - 有什么理由在 LogBack Logger 上使用 private 而不是 private final static?

在SpringController中实例化Logger时,是否有任何理由将其声明为staticfinal?Logger不在MyController.class之外使用。我已经看到这两个例子都在使用,但不明白为什么我应该使用其中一个。privateLoggerlogger=LoggerFactory.getLogger(MyController.class);对privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MyController.class); 最佳答案 我个人使用pr

java - 带返回值的 try{} finally{} 构造

这个问题在这里已经有了答案:Javatry-finallyreturndesignquestion(7个回答)DoesafinallyblockalwaysgetexecutedinJava?(51个回答)关闭7年前。我想知道为什么Java编译器会接受以下代码:publicclassMain{publicstaticvoidmain(String...args){System.out.println("a()="+a());}publicstaticStringa(){try{return"a";}catch(Throwablet){}finally{return"b";}}}这可以而

java - 尽可能声明变量 "final"是一种好习惯吗?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Whenshouldoneusefinal?除非必要,我倾向于声明所有变量final。我认为这是一个很好的做法,因为它允许编译器检查标识符是否按我的预期使用(例如,它没有变异)。另一方面,它使代码困惑,也许这不是“Java方式”。我想知道关于非必需使用final变量是否存在普遍接受的最佳实践,以及此讨论是否还有其他权衡或方面需要注意。 最佳答案 “Java方式”本质上是杂乱无章的。我说这是一种很好的做法,但我没有遵循。测试通常可以确保我在做我想做的事情,而

java - 为什么不显式调用 finalize() 或启动垃圾收集器?

看完thisquestion,我想起了当我学习Java并被告知永远不要调用finalize()或运行垃圾收集器时,因为“这是一个你永远不需要担心的大黑匣子”。有人可以将其推理归结为几句话吗?我确信我可以阅读Sun关于这个问题的技术报告,但我认为一个漂亮、简短、简单的答案会满足我的好奇心。 最佳答案 简短的回答:Java垃圾收集是一个非常精细的工具。System.gc()是一把大锤。Java的堆被分成不同的代,每一代使用不同的策略收集。如果您将分析器附加到一个健康的应用程序,您会发现它很少需要运行最昂贵的类型的集合,因为大多数对象都被