码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——java基础--面向对象3

时间:2014-11-23 23:32:51      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:黑马程序员   java基础   设计模式   对象   

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、概述
1.设计模式
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件的时候,建议配置文件封装成对象,会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
2.如何保证对象唯一性呢?
思想:
1.不让其他程序创建该对象
2.在本类中创建一个本类对象
3.对外提供方法,让其他程序获取这个对象
步骤:
1.将构造函数私有化
2.就在类中创建一个本类对象
3.定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。
二:实现

//饿汉式
public class SingleDemo{
	public static void main(String args[]){
	Single ss = Single.getinstance();	
		}
}
class Single{
	private Single(){}//私有化构造函数
	private static Single s = new Single();//创建私有并静态本类对象
	public static Single getinstance(){//定义公有并静态的方法,返回该对象
		return s;
		}
	}
//懒汉式
public class SingleDemo{
	public static void main(String args[]){
	Single ss = Single.getinstance();	
		}
}
class Single{
	private Single(){}
	private static Single s = null;//先初始化为null
	public static Single getinstance(){
		if(s == null){	//判断是否为空
			s = new Single();//创建新类
		return s;
	}
}
懒汉式会出现问题,就是在前一个对象进入后,cpu中断了对他的操作,以后的就进不去
解决办法:
class Single{
	private Single(){}
	private static Single s = null;//先初始化为null
	public static synchronized Single getinstance(){//用synchronized上锁
		if(s == null){	//判断是否为空
			s = new Single();//创建新类
		return s;
	}
}//但这样执行效率很差
class Single
{
	private static Single s = null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
		{
			synchronized(Single.class)
			{				
				if(s==null)//进行双重判断
					s = new Single();
			}
		}
		return s;
	}
}

三:创建对象详解
Person p = new person();
创建对象都在内存中做了什么事情?
1.先将硬盘上指定位置的person.class文件加载进内存
2.执行main方法时,在占内存中开辟main方法的空间,然后再main方法的栈区分配了一个变量p
3.在堆内存开辟一个实体空间,分配一个内存的首地址new
4.在该实体空间中进行属性的空间分配,并进行默认初始化
5.对空间中的属性进行显示初始化
6.进行实体的构造代码块初始化
7.调用该实体对应的构造函数,进行构造函数初始化
8.将首地址赋给p,p变量就引用了该实体(也就是指向了该对象)

黑马程序员——java基础--面向对象3

标签:黑马程序员   java基础   设计模式   对象   

原文地址:http://blog.csdn.net/orangeisnotapple/article/details/41419015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!