/*单例模型
*18.10.8
*修改于:18.11.5
*目的:让某一个类只有一个实例对象
*步骤 1.让构造方法私有化
* 重点:2.对外提供一个公共的获取当前类的对象的方法
* 3.提供一个当前类型的静态变量
*懒汉式:优点:节约内存 缺点:多线程在if语句中有缺陷,容易造成两个对象。
*饿汉式:慢慢百度
* 模型用法:任务管理器,回收站
*/
public class TestPerson_01 {
public static void main(String[] args){
PersonTest1 xiaowang=PersonTest1.getPersonTest1();
PersonTest1 wangjie=PersonTest1.getPersonTest1();
PersonTest1 dog=PersonTest1.getPersonTest1();
System.out.println(xiaowang.name);
System.out.println(wangjie.name);
System.out.println(dog.name);
//结果:输出全为wangyulin
PersonTest2 chongqing=PersonTest2.getPersonTest2();
PersonTest2 beijing=PersonTest2.getPersonTest2();
System.out.println(chongqing.country);
System.out.println(beijing.country);
//结果:输出全为china
}
}
// 饿汉式
class PersonTest1{
String name;
int age;
String where;
String sex;
static PersonTest1 pt1=new PersonTest1();
private PersonTest1(){
this.name="wangyulin";
this.age=20;
this.where="rz";
this.sex="boy";
}
//唯一对外实例化一个对象的入口
//将唯一实例化对象pt1提供出去
public static PersonTest1 getPersonTest1(){
return pt1;
}
}
//懒汉式
class PersonTest2{
String country;
static PersonTest2 pt2=null;//注意对象必须为static
private PersonTest2(){
this.country="china";
}
public static PersonTest2 getPersonTest2(){
if(pt2==null)
pt2=new PersonTest2();
return pt2;
}
}
类加载简单说明:(来自http://www.cnblogs.com/chenweichu/p/7785096.html)
在第一次创建一个类的对象或者第一次调用一个类的静态属性和方法的时候,会发生类加载
类加载期间,如果发现有静态属性,就给对应的静态属性分配内存空间,并赋值
这个过程完成之后,今后在调用该类的静态属性,虚拟机会直接寻找改属性先前已经分配的内存空间地址,然后调用其值。同样,修改这个类的静态属性也一样
说白了,静态属性将永远占用某一块固定的内存空间,直到程序终止