/*
 * java运行内存:
 *     堆(heap):存储的全是对象,每个对象都包含一个与之对应的class信息
 *                只有一个heap,被所有线程共享,heap中不存放基本数据类型和对象引用,只放对象本身
 *     栈:每个线程都有属于自己的栈(用户态栈),栈中保存基本数据类型的对象和自定义对象的引用,这个引用指向了堆区的实例
 *     方法区(静态区):被所有线程共享,包含所有的class和static变量
 *                  包含整个程序中永远唯一的元素,即class,static变量
 *
 *
 * 如何确定一个属性,方法要确定为static
 *     属性:可以被多个对象共享,不会随着对象不同而不同
 *     方法:操作静态属性的方法
 *          工具类中的方法,习惯上申明为static.比如:Math,Arrays,Collections
 * */

单例模式

/*
 *     单例模式
 *    对比:
 *    饿汉式:
 *        好处:线程安全
 *        坏处:加载时间长
 *    懒汉式:
 *        好处:延迟创建
 *        坏处:线程不安全,创建对象时有并发
 *
 *    常用单例模式场景:
 *        网站计数器,应用程序的日志应用,数据库连接池,读取配置文件类
 *        Application,任务管理器,回收站
 * */

饿汉式,随着类被加载时就new

/*
 * 1.饿汉式:一开始就new出来
 * */
class Bank{
    //1.私有化构造器
    private Bank() {}

    //2.内部创建类的静态对象
    private static Bank instance = new Bank();

    //3.提供static公共方法,返回类对象
    public static Bank getInstance() {
        return instance;
    }
}

懒汉式

/*
 * 2.懒汉式:什么时候要用什么时候再造
 * */
class Order{
    //1.私有化构造器
    private Order() {}

    //2.声明当前类静态对象,没有初始化
    private static Order instance = null;

    //3.声明public static的返回当前类对象的方法
    public static Order getInstance() {
        if(instance == null)
            instance = new Order();
        return instance;
    }

}
02-04 20:00