现在的位置: 首页 > 综合 > 正文

黑马程序员—静态代码块、单例设计模式

2013年10月12日 ⁄ 综合 ⁄ 共 2084字 ⁄ 字号 评论关闭

---------------------- android培训java培训、期待与您交流! ----------------------

静态代码块(注意和构造代码块比较)

格式:

Static

{

  执行语句;

}

Eg

class StaticCode

{

static

{

System.out.println("a");

}

}

静态代码块的特点:

随着类的加载而执行,只执行一次。并优先于主函数。

用于给类进行初始化。

class StaticCodeDemo 

{

static

{

System.out.println("b");

}

public static void main(String[] args) 

{

new StaticCode();

new StaticCode();

System.out.println("Hello World!");

}

static

{

System.out.println("c");

}

}

class StaticCode

{

static

{

System.out.println("a");

}

}

结果:

b

c

a

Hello World!

分析结果:

(1)静态代码块随着类的加载而执行,只执行一次,并优先于主函数。所以输出bc

(2)执行main函数:

(3)调用StaticCode();

(4)内存加载 StaticCode类,执行 System.out.println("a");输出a

(5)因为静态代码块随着类的加载而执行,只执行一次,所以,第二个

new StaticCode();没用了,不执行。没有结果,

6System.out.println("Hello World!");输出Hello World!

对象的初始化过程

EgPerson p=new Person(zhangsan”,30);

(1)因为new用到了Person.class文件。所以会先找到Person.class文件并加载到内存中。

(2)如果该类中有static代码块,就执行该类中的static代码块,给Person.class类进性初始化。

(3)在堆内存中开辟内存空间,分配内存地址。

(4)在堆内存中建立对象的特有属性。并进行默认初始化。

(5)对属性进行显示初始化。

(6)对对象进行构造代码块初始化。

(7)对对象进行相应的构造函数初始化。

(8)将内存地址赋给栈内存中的p变量。

对象调用成员过程:

Java中有23种设计模式。

单例设计模式:解决一个类在内存中存在一个对象。

想要保证对象唯一:

(1)为了避免其他程序过多建立该类对象,应先禁止其他程序建立该类对象。

(2)还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。

(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

代码实现:

(1)将构造函数私有化

(2)在类中创建一个本类对象

(3)提供一个方法可以获取到该对象。

使用:

对事物该怎么描述还怎么描述。

当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

class Single

{

private int num;

public void setNum(int num)

{

this.num=num;

}

public int getNum()

{

return num;

}

(4) private Single(){}//将构造函数私有化

(5) private static Single s=new Single();//在类中创建一个本类对象

public static Single getInstance()//提供一个方法可以获取到该对象

{

return s;

}

}

class  SingleDemo2

{

public static void main(String[] args) 

{

Single s1=Single.getInstance();

Single s2=Single.getInstance();

s1.setNum(25);

System.out.println(s2.getNum());

}

}

结果:

25

“三步走”有2中方式:

/*“三步走”的法一:饿汉式

先初始化

Single类一进入内存,就已经创建好了对象。

class Single

{

private static Single s=new Single();

private Single(){}

public static Single getInstance()

{

return s

}

}

*/

/*

法二:懒汉式:对象是方法被调用时,才初始化,

class Single

{

private static Single s=null

private Single(){}

public static Single getInstance()

{

if (s==null)

{

s=new Single();

}

return s;

}

}

*/

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

抱歉!评论已关闭.