博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Effective Java》—— 创建与销毁对象
阅读量:5052 次
发布时间:2019-06-12

本文共 1854 字,大约阅读时间需要 6 分钟。

本篇主要总结的是《Effecticve Java》中关于创建和销毁对象的内容。

比如:

  • 何时以及如何创建对象
  • 何时以及如何避免创建对象
  • 如何确保及时销毁
  • 如何管理对象销毁前的清理动作

考虑用静态工厂方法代替构造器

使用静态工厂的优势:

  • 有名称
  • 不必每次调用的时候都创建一个新的对象
  • 返回原返回类型的任何子类型对象
  • 在创建参数化类型实例时,代码更加简洁。

使用静态工厂的缺点:

  • 类如果不包含公有的或者受保护的构造器,就不能被子类化
  • 与其他的静态方法实际上没有任何区别

举个例子:

public class Apple{    public Apple(String type){}        public static Apple newInstance(){        return new Apple("qing");    }}//使用的时候直接newInstance就可以Apple.newInstance();

常用的静态工厂名称:valueOf,of,getInstance,newInstance,getType,newType.

遇到多个构造器参数时考虑使用构建器

如果参数很多,在使用的时候也会很繁琐。比如

new Person(name,age,address,tel,gender);

当参数大于三个的时候,就可以考虑使用构建器了,特别实在参数可选的时候。

public class Person{    public Person name(String name){return this;}    public Person age(String age){return this;}    public Person gender(String gender){return this;}    public Person tel(String tel){return this;}}//使用的时候可以这样用(new Person()).name("xingoo").age(30).gender("male").tel(13333333333);

使用构建器的缺点就是代码会比较冗长。

用私有构造器或者枚举类型强化Singleton属性

第一种方式,是饿汉模式:

publci class Elvis{    public static final Elvis INSTANCE = new Elvis();    private Elvis(){}    public void xxx(){}}

另一种方式,属于懒汉模式:

public class Elvis{    private static Elvis INSTANCE;    private Elvis(){}    public static Elvis getInstance(){        if(INSTANCE == null)            INSTANCE = new Elvis();        return INSTANCE;    }    xxx}

通过私有构造器强化不可实例化的能力

有一些比如工具类,是不想被实例化的,可以使用私有的构造方法,来避免实例化:

public class XXUtil{    private XXUtil(){}}

缺点是这样的类无法被子类化。

避免创建不必要的对象

尽量应该避免创建不必要的对象,比如:

String s = new String("xxx");

其实创建了两个字符串对象。

尽量优先使用long这种基本类型。

消除过期的对象引用

常见的是在栈操作,出栈操作并不意味着释放对象。

public Object pop(){    if(size == 0)        throw new EmptyStackException();    Object result = elements[--size];    elements[size] = null;    return result;}

避免使用终结方法

finalizer方法是再垃圾回收的时候触发的,因此不能准确的知道终结方法调用的时间。因此最好是在try catch finally的时候释放对象。

这种释放对象的时机,叫做显示终止方法。

转载于:https://www.cnblogs.com/xing901022/p/5910340.html

你可能感兴趣的文章
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
oracle连接的三个配置文件(转)
查看>>
Centos下源码安装git
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>
[置顶] 细说Cookies
查看>>
[wp7软件]wp7~~新闻资讯,阅读软件下载大全! 集合贴~~~
查看>>
二叉树的遍历问题总结
查看>>
聊天室(C++客户端+Pyhton服务器)_1.框架搭设
查看>>
pytho logging
查看>>
Python内置函数(29)——help
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
java中Hashtable和HashMap的区别(转)
查看>>
对Feature的操作插入添加删除
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
WCF 配置文件
查看>>