对象初始化过程与单例设计模式(饿汉式与懒汉式)

来源:互联网 发布:color run 知乎 编辑:程序博客网 时间:2024/06/08 06:35
1.对象初始化过程:(先加载类到内存,然后加载类属性,成员方法)定义一个类Person,  在new Person("zhangsan",20);初始化过程:1.因为new 用到Person.class文件,所以会先找到Person.class文件并加载到内存中.2.执行该类中的static静态代码块,如果有的话,给Person.class类进行初始化.3.在对内存中开辟空间,分配内存地址.4.在对内存中建立对象的特有属性,并进行默认初始化.5.对属性进行显示初始化.6.对对象进行对应的构造代码块初始化.7.对对象中构造函数进行初始化.,8.将内存地址付给栈内存中的p变量.注意: 静态只能在栈内存里,非静态变量在堆里.2.单例设计模式:解决一个类在内存中只存在一个对象(保证对象唯一).1.禁止其他程序建立该类对象.2.在本类自定义一个对象.3.为了提供其他程序使用该类对象,对外提供一些访问方法.解决问题:1.将构造函数私有化.(私有化无参构造函数,这样外界就不能直接访问该类对象.)2.在类中创建一个本类对象.(静态类)3.提供一个方法可以获取到该对象(静态方法).(一开始就创建)单例饿汉式(初始化时候创建对象):(开发常用)class  Single{private static Single s=new Single();;private Single(){  //私有化public static getInstance(){return s;}}(创建后用)单例懒汉式(对象被调用时才创建对象):class Single{private Single(){}private Single s=null;public static Single getInstance(){if(s==null){ synchronized(Single.class){if(s==null){  //排除线程同时进入,当第三者进入时,已不为空.a=new Single();}}}return s;}}注意:1.常用饿汉式.     2.在使用懒汉式时,会出现线程冲突(多程序同时创建),这是后要加上synchronized
0 0