/* * 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; } }