草庐IT

finalization

全部标签

c++ - 在没有基类(非派生)的类中为虚函数添加 final 关键字是否有意义

我正在阅读一篇很棒的awesomeC++11tutorial并且作者在解释final关键字时提供了这个例子:structB{virtualvoidf()constfinal;//donotoverridevirtualvoidg();};structD:B{voidf()const;//error:D::fattemptstooverridefinalB::fvoidg();//OK};那么在这里使用final关键字有意义吗?在我看来,您可以避免在此处使用virtual关键字并防止f()被覆盖。 最佳答案 如果不将函数标记为virt

c++ - 编译器如何从 C++ 的新 final 关键字中受益?

C++11将允许将类和虚方法标记为final以禁止从它们派生或覆盖它们。classDriver{virtualvoidprint()const;};classKeyboardDriver:publicDriver{voidprint(int)constfinal;};classMouseDriverfinal:publicDriver{voidprint(int)const;};classDatafinal{intvalues_;};这非常有用,因为它告诉接口(interface)的读者一些关于使用这个类/方法的意图。用户在尝试覆盖时获得诊断可能也很有用。但是从编译器的角度来看有优势吗

c++ - 编译器如何从 C++ 的新 final 关键字中受益?

C++11将允许将类和虚方法标记为final以禁止从它们派生或覆盖它们。classDriver{virtualvoidprint()const;};classKeyboardDriver:publicDriver{voidprint(int)constfinal;};classMouseDriverfinal:publicDriver{voidprint(int)const;};classDatafinal{intvalues_;};这非常有用,因为它告诉接口(interface)的读者一些关于使用这个类/方法的意图。用户在尝试覆盖时获得诊断可能也很有用。但是从编译器的角度来看有优势吗

php - 如何解决 PHP 中缺少 finally block 的问题?

5.5之前的PHP没有finallyblock-即,在大多数合理的语言中,您可以这样做:try{//dosomething}catch(Exceptionex){//handleanerror}finally{//cleanupafteryourself}PHP没有finallyblock的概念。任何人都有解决该语言中这个相当烦人的漏洞的经验吗? 最佳答案 解决方案,不。烦人的繁琐解决方法,是的:$stored_exc=null;try{//Dostuff}catch(Exception$exc){$stored_exc=$exc;

php - 如何解决 PHP 中缺少 finally block 的问题?

5.5之前的PHP没有finallyblock-即,在大多数合理的语言中,您可以这样做:try{//dosomething}catch(Exceptionex){//handleanerror}finally{//cleanupafteryourself}PHP没有finallyblock的概念。任何人都有解决该语言中这个相当烦人的漏洞的经验吗? 最佳答案 解决方案,不。烦人的繁琐解决方法,是的:$stored_exc=null;try{//Dostuff}catch(Exception$exc){$stored_exc=$exc;

java - 为什么要在 Java 中声明一个不可变类 final?

我读到那是为了制作classimmutable在Java中,我们应该这样做,不提供任何setter将所有字段标记为私有(private)使类(class)成为final类为什么需要第3步?为什么要标记类final? 最佳答案 如果你不标记类final,我可能会突然让你看似不可变的类实际上是可变的。例如,考虑以下代码:publicclassImmutable{privatefinalintvalue;publicImmutable(intvalue){this.value=value;}publicintgetValue(){retu

java - 为什么要在 Java 中声明一个不可变类 final?

我读到那是为了制作classimmutable在Java中,我们应该这样做,不提供任何setter将所有字段标记为私有(private)使类(class)成为final类为什么需要第3步?为什么要标记类final? 最佳答案 如果你不标记类final,我可能会突然让你看似不可变的类实际上是可变的。例如,考虑以下代码:publicclassImmutable{privatefinalintvalue;publicImmutable(intvalue){this.value=value;}publicintgetValue(){retu

java - 为什么JDK源代码取 `final`实例的 `volatile`副本

我阅读了关于ConcurrentHashMap的JDK源代码。但是下面的代码让我很困惑:publicbooleanisEmpty(){finalSegment[]segments=this.segments;...}我的问题是:“this.segments”被声明:finalSegment[]segments;所以,在这里,在方法的开头,声明了一个相同类型的引用,指向相同的内存。作者为什么要这样写?他们为什么不直接使用this.segments呢?有什么原因吗? 最佳答案 这是涉及volatile变量的无锁代码的典型习语。在第一行,

java - 为什么JDK源代码取 `final`实例的 `volatile`副本

我阅读了关于ConcurrentHashMap的JDK源代码。但是下面的代码让我很困惑:publicbooleanisEmpty(){finalSegment[]segments=this.segments;...}我的问题是:“this.segments”被声明:finalSegment[]segments;所以,在这里,在方法的开头,声明了一个相同类型的引用,指向相同的内存。作者为什么要这样写?他们为什么不直接使用this.segments呢?有什么原因吗? 最佳答案 这是涉及volatile变量的无锁代码的典型习语。在第一行,

java - 为什么在 catch 之后使用 finally 而不是 code

这个问题在这里已经有了答案:Whydoweusefinallyblocks?[duplicate](11个回答)关闭4年前。为什么要这样做}catch(SQLExceptionsqle){sqle.printStackTrace();}finally{cs.close();rs.close();}不是这个}catch(SQLExceptionsqle){sqle.printStackTrace();}rs.close();cs.close(); 最佳答案 因为如果抛出异常在执行tryblock之后没有代码除非异常被捕获。无论您的tr