1、对象的初始化过程
Person per = new Person("zhangshan",22);
第一步:new关键字,jvm虚拟机调用Person.class文件并加载到内存中;
第二步:执行Person.class中的静态代码块,进行类实例化;
第三步:分配堆内存;
第四步:建立成员变量,并默认初始化;
第五步:成员变量赋值;
第六步:构造代码块运行;
第七步:对应构造函数运行;
第八步:把堆内存地址给per栈内存。
2、对象调用成员变量过程
class Test01{
//成员变量
private String name;
//构造函数,对象加载
public StaticTest01(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public classStaticDemo01 {
publicstatic void main(String[] args){
StsticTrst01 s= new StaticTest01("zhangsan");
s.setName("lisi")
}
}
3、单例设计模式
单例设计模式:一个类在内存中只存在一个对象。
保证对象唯一:
1、为了其他程序过多建立该类对象,禁止其他程序建立该类对象。------将构造函数私有化
2、还为了让其他程序访问到该类对象,在本类中只定义一个对象。------在类中创建一个本类对象
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。------提供一个方法可以获取该对象。
class Single{
privateString name;
privateint age;
publicvoid setName(String name){
this.name= name;
}
publicString getName(){
returnthis.name;
}
publicvoid setAge(int age){
this.age= age;
}
publicint getAge(){
returnthis.age;
}
//单例设计,创建私有构造函数,禁止其他程序实例化
privateSingle(){}
//在本程序内建立实例
privatestatic Single instance = new Single();
//对外返回实例,因为外面调用为类调用,所以静态化static
publicstatic Single getInstance(){
returninstance;
}
}
public classSingleDemo01 {
publicstatic void main(String[] args){
Singles1 = Single.getInstance();
s1.setAge(20);
Singles2 = Single.getInstance();
System.out.println(s2.getAge());
}
}
4、两种单例设计模式
/**
*饿汉式
*类一加载,就创建对象
*/
class SingleMedo1 {
privateSingleMedo1(){}
privatestatic SingleMedo1 instance = new SingleMedo1();
publicstatic SingleMedo1 getInstance(){
returninstance;
}
}
/**
* 懒汉式
* 类加载时,没有创建对象,为null
* */
class SingleMode2{
privateSingleMode2(){}
privatestatic SingleMode2 instance = null;
publicstatic SingleMode2 getInstance(){
if(instance==null){
instance= new SingleMode2();
}
returninstance;
}
}
懒汉式单例设计模式缺点解决方法:
class SingleMode3{
privateSingleMode3(){}
privatestatic SingleMode3 instance = null;
publicstatic SingleMode3 getInstance(){
//双重判断
if(instance==null){
synchronized(SingleMode3.class){
if(instance==null){
instance= new SingleMode3();
}
}
}
returninstance;
}
}
总结:
1、对象初始化八步骤;
2、单例设计模式:饿汉式、懒汉式,其中饿汉式好。