面向对象四

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、单例设计模式:饿汉式、懒汉式,其中饿汉式好。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值