`

java-创建和销毁对象(一)

阅读更多

这一系列博客都是《Effective java》第二版的读书笔记,如果大家想深入了解的话建议读一读原书。

 

第二章 创建和销毁对象

 本章主题:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够实时的销毁,以及销毁之前必须进行的各种清理动作。

 

第1条:考虑用静态工厂方法代替构造器。

 对于类而言,为了让客服端获得它的一个实例最常用的的一个方法就是提供一个公有的构造器。还有一种方法,类可以提供一个公有的静态工厂方法(static factory method),它只是一个返回类实例的静态方法

例如:

 

public static Boolean valueof(boolean b){
        return b? Boolean.TRUE:Boolean.FALSE;
}

 

通过静态工厂方法构造对象的优势:

1)静态工厂方法与构造器不同的第一大优势在于,它们有名称,使客服端代码更加容易被阅读。                                                

2)不必在每次调用的它们的时候都创建一个新的对象(这个完全取决于具体的实现)。                                                      

3)它们可以返回原返回类型的任何子类型的对象。

     这种灵活性的一种应用:API可以返回对象,同时又不会使对象的类变成公有的。公有的静态方法所返回的对象的类不仅可以是非公有的,而且该类还可以随着每次调用而发生变化着取决于静态工厂方法的参数值,只要是已声明返回类型的子类型,都是允许的。

4)在创建参数化类型(也就是泛型,jdk1.5新特性)实例的时候,它们是的代码变得更加简洁。

/**普通创建****/
Map<String,List<String>> m=new HashMap<String,List<String>>;
/**有了静态方法过后***/
Map<String,List<String>> m=HashMap.newInstance();
//前提HashMap提供了这个静态工厂方法
 public static <k,v> HashMap<k,v> newInstance(){
  return new HashMap<K,V>();
}

 

静态工厂方法的主要缺点在于:1)类如果不含有他的公有或者受保护的构造器,就不能被子类化(即被继承)。

                                                     2)它们与其他静态方法实际上没有任何区别。

     

                                                     

0
1
分享到:
评论

相关推荐

    JAVA创建和销毁对象的方法

    本篇文章主要介绍了JAVA创建和销毁对象的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java逻辑思维笔试题-effective-java-3rd-edition:有效的Java第3版注释

    创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 12 - 序列化 第 2 章 - 创建和销毁对象 第 1 项 - 考虑静态工厂...

    监听session的创建到销毁

    这是一个用springMVC的项目 是一个监听器 用于监听session的创建、销毁、移除。会触发相应的事件处理

    Java线程池技术详解

    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一...

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

    面向对象的编程语言使程序能够直观的反应客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法进行软件开发,是当今计算机领域中软件开发和应用的主流技术。

    java7hashmap源码-Effective-Java-3th:Effective-Java-3th

    创建和销毁对象 考虑使用静态工厂方法代替构造方法 优点: 有名字 每次调用的时候,不一定要创建新的对象 可以返回一个类型的子类型 Collections就是这种用法 返回对象的类可以随调用的不同而变化(用输入的参数值...

    [java]读书笔记整理:一切都是对象

    创建程序时,java编译器必须知道存储在堆栈内所有数据的确切大小和声明周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,...

    java对象实体类属性字段对比变化过程

    这种变化过程通常涉及到对象的创建、使用和销毁等阶段。 在对象的创建阶段,Java对象实体类会根据预设的属性字段和初始值进行初始化。这些属性字段通常定义在类的声明中,并使用关键字进行描述。在实例化一个对象时...

    Thinking in java4(中文高清版)-java的'圣经'

    2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.2.1 存储到什么地方 2.2.2 特例:基本类型 2.2.3 Java中的数组 2.3 永远不需要销毁对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 创建新的数据类型:类 2.4.1 域和方法 ...

    Java支持库2.0#0版

    使用时,可直接通过“Java本地接口”的各类方法访问Java类库(即与“Java虚拟机”通信),由支持库本身自动完成“Java虚拟机”的创建和销毁。如果需要特别指定“用户类路径”或“本地库路径”,则必需在使用“Java...

    java高效编程指南

    JAVA高效编程指南 1 创建和销毁对象 2 对象定义 3 类和接口 4 结构的替代

    Java支持库2.0#0版(静态版)

    使用时,可直接通过“Java本地接口”的各类方法访问Java类库(即与“Java虚拟机”通信),由支持库本身自动完成“Java虚拟机”的创建和销毁。如果需要特别指定“用户类路径”或“本地库路径”,则必需在使用“Java...

    java-tests:一个带有我的Java和JVM测试源代码的简单存储库

    我主要想比较各种任务(例如循环,创建和销毁对象等)的执行速度,CPU和内存消耗。 大多数测试都包含解释。 输入 如果使用的是IntelliJ IDEA,请进入项目/模块属性,然后选择src文件夹并将其标记为Source 。 然后...

    thinking in Java 第四版中文 part1

    2.3 永远不需要销毁对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 创建新的数据类型:类 2.4.1 域和方法 2.4.2 基本成员默认值 2.5 方法、参数和返回值 2.5.1 参数列表 2.6 构建一个Java程序 2.6.1 名字可见性 2.6.2 ...

    Effective Java第三版1

    《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参

    Java 基础核心总结 +经典算法大全.rar

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

    java笔试题a说他不和x比-effective-java-in-a-nutshell:简而言之,有效的Java

    章:创建和销毁对象 第 1 条:考虑静态工厂方法而不是构造函数 由于以下原因,最好使用静态工厂而不是构造函数: 它们的名称可以帮助识别静态构造函数的操作 不需要返回新对象,您可以控制何时以及是否需要返回新...

Global site tag (gtag.js) - Google Analytics