当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: final 关键字常常被误用 - 声明类和方法时使用过度,而声明实例字段时却使用不足。
 

 

    摘要:如果您不小心,线程可能会在没有(堆栈)跟踪的情况下从服务器应用程序中消失。在本文中,线程问题专家 brian goetz 提供了用于预防和检测线程“擅离职守”的技术。 当单线程应用程序中的主线程抛出一个未捕获的异常时,因为控制台中会打印堆栈跟踪(也因为程序停止),所以您很可能注意到。但在多线程应用程序中,尤其是在作为服务器运行并且不与控制台相连的应用程序中,线程死亡可能成......
    摘要:java 语言按照 javadoc 注释约定采用了一种集成的方法来进行 api 文档编制。javadoc 工具可以帮助生成好的 api 文档,然而大多数 java api 文档却很糟糕。因为它是源代码的一部分,所以 api 的文档编制职责最终还是落到了工程师身上。在本文中,brian 对 java 文档编制实践的当前状态进行了严厉的批评,同时提供了一些关于如何编写更有用的 javadoc 的准则。......


Java 理论和实践:那是您的最终答案吗?
final 关键字常常被误用 - 声明类与方法时使用过度,而声明实例字段时却使用不足.本月,java 实践者 brian goetz 探究了一些有关有效使用 final 的准则.

如同它的“表亲”- c 中的 const 关键字一样,根据上下文,final 表示不同的东西.final 关键字可应用于类.方法或字段.应用于类时,意味着该类不能再生成子类.应用于方法时,意味着该方法不能被子类覆盖.应用于字段时,意味着该字段的值在每个构造器内必须只能赋值一次而且此后该值永远不变.

为什么这个类是 final? 【程序编程相关:对黑洞的疑惑

大多数 java 文本都适当地描述了使用 final 关键字的用法与后果,但是很少以准则的方式提供有关何时使用 final 及使用频率的内容.根据我的经验,final 非常过度地用于类与方法(通常是因为开发人员错误地相信这会提高性能),而在其用武之地 - 声明类实例变量 - 却使用不足. 【推荐阅读:一些珍藏代码奉献,绝对有价值,不可不看!

对于开发人员来说,将类声明为 final,却不给出为何作出这一决定的说明,这样的做法很普遍,在开放源码项目中尤其如此.一段时间之后,特别是如果原来的开发人员不再参与代码的维护,其它开发人员将总是发问“为何类 x 被声明成 final?”.通常没人知道,当有人确实知道或喜欢猜测时,答案几乎总是“因为这能使它运行得更快”.普遍的理解是:将类或方法声明成 final 会使编译器更容易地内联方法调用,但是这种理解是不正确的(或者至少说是大大地言过其实了). 【扩展信息:Symbian游戏编程入门 (一) Sy

final 类与方法在编程时可能是非常大的麻烦 - 它们限制您选择重用已有的代码与扩展已有类的功能.有时有很好的理由将类声明成 final(如强制不变性),此时使用 final 的益处将大于其不便之处.性能提高几乎总是成为破坏良好的面向对象设计原则的坏理由,而当性能提高很小或者根本没有提高时,则它真正是个很差的权衡方法.

过早优化

出于性能的考虑,在项目的早期阶段将方法或类声明成 final 是个坏主意,这有多个原因.首先,早期阶段设计不是考虑循环计算性能优化的时候,尤其当此类决定可能约束您使用 final 进行设计.其次,通过将方法或类声明成 final 而获得的性能优势通常为零.而且,将复杂的有状态的类声明成 final 不利于面向对象的设计,并导致体积庞大且面面俱到的类,因为它们不能轻松地重构成更小更紧凑的类.

与许多有关 java 性能的神话一样,将类或方法声明成 final 会带来更佳的性能,这一错误观念被广泛接受但极少进行检验.其论点是:将方法或类声明成 final 意味着编译器可以更加积极地内联方法调用,因为它知道在运行时这正是要调用的方法的版本.但这显然是不正确的.仅仅因为类 x 编译成 final 类 y,并不意味着同样版本的类 y 将在运行时被装入.因此编译器不能安全地内联这样的跨类方法调用,不管是不是 final.只有当方法是 private 时,编译器才能自由地内联它,在这种情况下,final 关键字是多余的.

另一方面,运行时环境与 jit 编译器拥有更多有关真正装入什么类的信息,可以比编译者作出好得多的优化决定.
...   下一页

 ·使用c#控制远程计算机的服务    »显示摘要«
    摘要: 在.net中提供了一些类来显示和控制windows系统上的服务,并可以实现对远程计算机服务服务的访问,如system.serviceprocess命名空间下面的servicecontroller 类,system.management下面的一些wmi操作的类。虽然用servicecontroller可以很方便的实现对服务的控制,而且很直观、简洁和容易理解。但是我认为他的功能同通过wmi来操作服务......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE