欢迎来到天天文库
浏览记录
ID:45849299
大小:600.00 KB
页数:68页
时间:2019-11-18
《Java高效编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Java高效编程刘齐虎目录概述创建和销毁对象对于所有对象都通用的方法类和接口方法通用程序设计异常多线程序列化概述概述对于程序设计语言,你需要理解语言的核心(corelanguage):它是面向算法的,还是面向函数的,或者是面向对象的?你需要知道词汇表(vocabulary):标准库提供了哪些数据结构、操作和功能设施?你还需要熟悉如何用习惯(customary)和高效(effective)的方式来构建代码。例如,Java程序设计语言是一门只支持单继承的面向对象程序设计语言,在每一个方法内部,它也支持命令方式的(面向语句的,statement-oriented)编码风格。Java库包括对
2、图形显示、网络、分布式计算和安全性的支持。但是,如何把这门语言以最佳的方式用到实践中呢?仅仅编写出能够有效地工作并且能够被别人理解的代码往往是不够的,我们还必须要把代码组织成易于修改的形式。针对一个任务T可能会有10种不同的编码方法,而在这10种方法中,有7种方法是笨拙的、低效的或者是难以理解的。而在剩下的3种编码方法中,哪一种会最接近该任务T的下一年度版本的代码呢?这就是高效编程要解决的问题。高效编程并没有指导您如何编写一个实用的Java程序,而是指导您在Java程序设计中需要遵循什么样的规则才能编写出高效、清晰、简洁、正确、可用、健壮、灵活和可维护的程序。概述(续)高效编程的大多
3、数规则源于少数几条基本的原则。清晰性和简洁性是最为重要的:一个模块的用户永远也不应该被模块的行为所迷惑(那样就不清晰了);模块要尽可能的小,但又不能太小[术语模块(module),是指任何可重用的软件组件,从单个方法,到包含多个包的复杂系统都可以是一个模块]。代码应该被重用,而不是被拷贝。模块之间的相依性应该尽可能地降低到最小。错误应该尽早被检测出来,理想情况下是在编译时刻。虽然下面讲的规则不会百分之百地适用于任何时刻和任何场合,但是,它们确实刻画了绝大多数情况下最佳的程序设计行为。你不应该盲目地遵从这些规则,但是,你只应该在偶尔的情况下,有了充分的理由之后才打破这些规则。学习程序设
4、计的艺术,如同大多数其他的学科一样,首先要学会基本的规则,然后才能知道什么时候可以打破这些规则。从无规则,到有规则,再到灵活运用,达到所谓“运用之秒,存乎一心”的境界。创建和销毁对象创建和销毁对象本节的主题是创建和销毁对象:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够被适时地销毁,以及如何管理销毁之前必须进行的所有清除动作。考虑用静态工厂方法代替构造器对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器。还有一种方法,类可以提供一个公有的静态工厂方法(staticfactorymethod),它只是一个返回类的实例的静态方法。下面是一
5、个来自Boolean(基本类型boolean的包装类)的简单示例。这个方法将boolean基本类型值转换成了一个Boolean对象引用:publicstaticBooleanvalueOf(booleanb){returnb?Boolean.TRUE:Boolean.FALSE;}静态工厂方法与构造器不同的第一大优势在于,它们有名称。如果构造器的参数本身没有确切地描述正被返回的对象,那么,客户程序员可能不知道应该调用哪个构造函数去创建对象,有可能会调用错误的构造器,人们读到使用了这些构造器的代码时,如果没有参考类的文档,往往不知道这段代码是做什么用的。那么具有适当名称的静态工厂会更容
6、易使用,产生的客户端代码也更易于阅读。静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。这使得不可变的类可以使用预先构建好的实例,或者将构建好的实例缓存起来,进行重复分发,以避免重复创建不必要的对象。考虑用静态工厂方法代替构造器(续)静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象。这样我们在选择返回对象的类时就有了很大的灵活性。静态工厂方法的第一个缺点在于,类如果不含公有的或者受保护的构造器,就不能被子类化(因为,很多有了静态工厂方法的类,往往把构造器设为私有的,以避免显示的创建)。静态工厂方法的第二个缺点在于,它
7、们与其他的静态方法实际上没有任何区别。在API文档中,它们没有像构造器那样在API文档中明确标识出来,因此,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化一个类,这是非常困难的。简而言之,静态工厂方法和公有构造器都各有用处,我们需要理解它们各自的长处。静态工厂通常更加合适,因此切忌第一反应就是提供公有的构造器,而不先考虑静态工厂。遇到多个构造器参数时要考虑用构建器静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。考虑用
此文档下载收益归作者所有