如何更好的创建java对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更好的创建java对象相关的知识,希望对你有一定的参考价值。
上一篇我们意识到,在日常编码中,new方法常常被轻易的使用,但是某些场景下,对象实例不需要反复的创建,比如任务管理器。如果仍然使用new不断的创建对象,那必然浪费资源。由此我们来谈谈单例模式。
单例,即只存在单个实例。下面我们指的都是单应用下的单例。
想要实现单例,new不能对外界开放,所以构造方法需要设置为私有。同时为了外界访问,需要提供一个获取实例的方法。代码如下:
public class Demo { private final Demo demo = new Demo(); private Demo(){ } public Demo getInstance(){ return demo; } }
成员属性demo在Demo类加载后就会被实例化赋值。这种方式称为饿汉式。缺点很明显:如果demo一直不需使用,那么为demo分配的内存一直处于浪费状态。我们是否可以在需要使用的时候再实例化呢?
public class Demo { private Demo demo; private Demo(){ } public Demo getInstance(){ if(demo==null){ demo = new Demo(); } return demo; } }
在单线程情况下,Demo类型确实是单实例的(不考虑通过序列化产生的demo对象)。那么多线程情况下呢,仍然可能创建多个实例。如何修改呢?
public class Demo { private Demo demo; private Demo(){ } public Demo getInstance(){ if(demo==null){ synchronized (this) { demo = new Demo(); } } return demo; } }
我们使用同步的方式已经可以实现多线程情况下的单例。是否有其他更好的实现方法呢?
public class Demo { private Demo(){ } private static class DemoInstance{ public static final Demo demo = new Demo(); } public Demo getInstance(){ return DemoInstance.demo; } }
我们可以根据自己的喜好选择不同的创建方式。以上纯属个人理解,如有错误,敬请纠正。
以上是关于如何更好的创建java对象的主要内容,如果未能解决你的问题,请参考以下文章