黑马程序员---静态代码块、单例设计模式
2012-07-09 21:12
465 查看
---------------------- 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)静态代码块随着类的加载而执行,只执行一次,并优先于主函数。所以输出b和c。
(2)执行main函数:
(3)调用StaticCode();
(4)内存加载 StaticCode类,执行 System.out.println("a");输出a。
(5)因为静态代码块随着类的加载而执行,只执行一次,所以,第二个
new StaticCode();没用了,不执行。没有结果,
(6)System.out.println("Hello World!");输出Hello World!
对象的初始化过程
Eg:Person 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
静态代码块(注意和构造代码块比较)
格式:
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)静态代码块随着类的加载而执行,只执行一次,并优先于主函数。所以输出b和c。
(2)执行main函数:
(3)调用StaticCode();
(4)内存加载 StaticCode类,执行 System.out.println("a");输出a。
(5)因为静态代码块随着类的加载而执行,只执行一次,所以,第二个
new StaticCode();没用了,不执行。没有结果,
(6)System.out.println("Hello World!");输出Hello World!
对象的初始化过程
Eg:Person 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
相关文章推荐
- 黑马程序员—— 4,二维数组,面向对象,制作帮助文档,静态代码块,构造代码块,构造函数,单例设计模式
- Java学习日记(三)面向对象、类、封装、构造函数、this、static、静态代码块、单例设计模式
- 黑马程序员java学习第六天,static静态的使用及单例设计模式
- 静态代码块和单例设计模式
- Java重修之路(七)面向对象之静态,主函数,Doc文档,静态代码块,对象初始化过程,单例设计模式
- java、静态代码块、static和单列设计模式
- 黑马程序员——静态导入,可变参数,自动拆箱装箱以及享元设计模式 JDK1.5新特性
- 20160717 代码块/静态/工具类设计思想/制作文档/单列设计模式
- 黑马程序员-day06static关键字和静态,单例设计模式
- 黑马程序员---2015.6.14java基础笔记--静态方--静态代码块--单例模式
- java基础--静态(函数、代码块)、单例设计模式、继承、final修饰符
- 黑马程序员_学习记录06:静态以及单例设计模式
- 【黑马程序员】java1.5新特性-----可变参数,静态导入,高级for循环及享元设计模式
- 黑马程序员_java面向对象总结【2】(静态、单例设计模式)
- day06static关键字,main函数,帮助文档的制作,静态代码块,对象的初始化过程,单例设计模式
- 设计模式(一)单例模式:4-静态代码块模式
- 黑马程序员——设计模式——简单工厂模式(静态工厂方法模式)
- 黑马程序员--01.JDK5部分新特性--01【静态导入】【可变参数数组】【享元设计模式的思想】
- 黑马程序员_源自梦想 静态、工具类、单例设计模式
- 黑马程序员_Java基础_面向对象,封装,继承,单例设计模式,构造函数,构造代码块