Effective Java -->(一)创建和销毁对象

创建|对象

Effective Java学习笔记JAVA语言支持四种基本类型:接口(Interface)、类(Class)、数组(Array)、和原语类型(Primitive)。前三种类型通常被称为引用类型(reference type),类的实例和数组是对象(object),而原语类型的值不是对象。一个类的成员(member)包括它的域(field),方法(method),成员类(member class)和成员接口(member interface)。一个方法的原型(signature)包括它的名字和所有形参的类型,方法原型不包括它的返回类型。

 第一条:考虑用静态工厂方法代替构造函数对于一个类,为了得到一个实例,最通常的方法是提供公有的构造函数NEW一个。另外一种方法是可以通过提供一个静态工厂方法(static factory method),它返回的是类的一个实例。下面是Singleton模式中的静态方法,返回类的唯一实例。public static A getInstance() { return INSTANCE;}

静态工厂方法的好处:(1)静态方法具有名字。如果一个构造函数的参数并没有确切地描述被返回的对象,那么选用适当名字的静态工厂可以使一个类更易于使用,并且相应的客户代码更易于阅读。(2)静态方法在每次调用的时候,不要求非得创建一个新的对象。静态工厂方法可以为重复的调用返回同一个对象。(例如Singleton模式)(3)静态方法可以返回一个原返回类型的子类型的对象。(这一点经常被用在基于接口的框架结构中,及抽象工厂模式,在Java的Collections Framework中有一个 java.util.Collections类,里面就有很多有用的静态方法,它是通过返回接口来引用一个被隐藏起来的实现类的实例)。

静态工厂方法的主要缺点:(1)类如果不含公有的或者受保护的构造函数,就不能被子类化。(鼓励使用复合结构而不是继承)(2)与其它的静态方法没有任何区别。其中用[valueOf]作名字的一般是类型转换操作,而名字[getInstance]方法返回实例。总结:静态工厂方法和公有的构造函数各有各自的用途,理解各自的长处以便更合理的设计类的结构。

第四条:避免创建重复的对象作为一个极端的反面例子,考虑下面的语名:String s = new String("sample");  //Don't do this! 该语句每被执行一次都会创建一个新的String实例(以前有点不太理解一句话:String对象是一个不可变字符串,而StringBuffer对象是一个可变字符串。这个不可变和可变让我不知如何想象,当我用一个String对象作为引用传给一个方法,再在方法体中改变它的值,但是在调用该方法后,外边的值依然没有改变,这不符合JAVA中的引用规则,才想到String对象的特殊性:不可变字符串)在开发工作中,经常会在方法体中实例化对象,在这个方法有可能被频繁调用并且实例化的对象是相同的实例时,应该考虑把这个实例化的对象放到方法体外来定义和实例化。从而避免创建重复的对象。另一方面,由于小对象的构造函数只做很小量的工作,所以,小对象的创建和回收动作是非常廉价的,特别是在现代的JVM实现上更是如此。通过创建附加的对象以使得一个程序更加清晰、简洁、功能强大,这往往是一件好事。

时间: 2024-12-30 18:08:14

Effective Java -->(一)创建和销毁对象的相关文章

《Effective Java》—— 创建与销毁对象

本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑用静态工厂方法代替构造器 使用静态工厂的优势: 有名称 不必每次调用的时候都创建一个新的对象 返回原返回类型的任何子类型对象 在创建参数化类型实例时,代码更加简洁. 使用静态工厂的缺点: 类如果不包含公有的或者受保护的构造器,就不能被子类化 与其他的静态方法实际上没有任何区别 举个例子: public cla

和我一起学Effective Java之创建和销毁对象

前言 主要学习创建和销毁对象: 1.何时以及如何创建对象 2.何时以及如何避免创建对象 3.如何确保它们能够适时地销毁 4.如何管理对象销毁之前必须进行的清理动作 正文 一.用静态工厂方法代替构造器 获取类的实例的常用方法有: 1.公有的构造器 2.公有的静态工厂方法 下面通过Boolean类(基本类型boolean的包装类)的简单示例来学习: //公有的构造器 public Boolean(String s) { this(parseBoolean(s)); } //公有的静态工厂方法 pub

java教学笔记之对象的创建与销毁_java

本课程的目标是帮你更有效的使用Java.其中讨论了一些高级主题,包括对象的创建.并发.序列化.反射以及其他高级特性.本课程将为你的精通Java的旅程提供指导. 1. 引言 在TIOBE 编程语言排名中,Sun 公司于1995年开发的Java语言是世界上使用最广泛的编程语言之一.作为一种通用编程语言,因为强大的工具包和运行时环境.简单的语法.丰富的平台支持(一次编写,到处运行)以及的异常活跃的社区支持,Java语言对软件开发工程师极具吸引力. 在这一系列的文章中,涵盖了Java相关的高级内容,因此

Effective Java (1) 考虑用静态工厂方法代替构造器

一.前言 从今天开始计划用一个月的时间,通过写读书笔记的方式来记录阅读这本Java领域经典中的经典书籍 - Effective Java过程中自己所思所想,以备以后查阅,同时分享出去也希望可以帮助到其他人,废话不多说,现在开始第一篇:创建和销毁对象. 二.考虑用静态工厂方法代替构造器 ①. 一般我们有什么办法可以创建对象呢? 方法1: 使用类公有构造器. 方法2:使用类的静态方法返回一个实例. ②. 使用静态方法创建对象有什么优点? 优点1: 静态工厂方法的名字是由我们自己命名,而构造方法必须与

Effective Java 笔记

创建和销毁对象 NO.1 考虑用静态工厂方法代替构造函数 静态工厂方法好处: 1.构造函数有命名的限制,而静态方法有自己的名字,更加易于理解. 2.静态工厂方法在每次调用的时候不要求创建一个新的对象.这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能.它使得一个类可以保证是一个singleton:他使非可变类可以保证"不会有两个相等的实例存在". 3.静态工厂方法在选择返回类型时有更大的灵活性.使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,还可以创建

effective java 学习笔记(一)

           最近在豆瓣上看到一些书评,很有感想,其中有一本叫 effective java据说很好,下载了看看,果然大作,很多东西都读不懂,功力尚浅,还得继续努力.读的时候感觉很爽,比讲语法的书好看多了. 第一部分 对象的创建和销毁. 讲了5条原则 1.用静态的工厂方法代替构造函数. 好处:避免创建重复的对象,因为静态的方法不许要创建对象就可以使用,造成不必要的浪费.重复返回同一个对象.保证单态. 工厂方法可以取更加容易记的名字,而构造函数则不行. 工厂方法可以返回一个原返回类型的子类

Android 中的 Effective Java(速查表)

本文讲的是Android 中的 Effective Java(速查表), Effective Java 是一本被广泛认可的著作,它指明了在写 Java 代码时兼顾可维护性与效率的方式.Android 也是使用 Java 来开发的,这意味着前书中的所有建议仍旧可用,真的是这样吗?并不尽然.某些同学 认为书中的"大部分"建议都不适用于 Android 开发,但我认为并不是这样.我承认书中的部分建议确实不适用,因为并非所有 Java 特性都有针对 Android 优化(比如说枚举,序列化等等

Effective Java Second Edition中文版已出版

http://yulimin.javaeye.com/blog/340464 我自己今天才刚见到书:) 译者序 Java从诞生到日趋完善,经过了不断的发展壮大,目前全世界拥有了成千上万的Java开发人员.如何编写出更清晰.更正确.更健壮且更易于重用的代码,是大家所追求的目标之一.作为经典Jolt获奖作品的新版书,它已经进行了彻底的更新,涵盖了自第1版之后所引入的Java SE 5和Java SE 6的新特性.作者探索了新的设计模式和语言习惯用法,介绍了如何充分利用从泛型到枚举.从注解到自动装箱的

Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记

声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com   书籍 <Effective Java 中文版> 03版 潘爱民译 本书介绍了57条极具实用价值的经验规则.这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案,通过对Java平台设计专家所使用的技术的全面描述,揭示了应坐什么和不应做什么,才能产生清晰.健壮和高效的代码.   正文  注意:条目和用语可能与书籍有所出入,但尽