静态初始化块
Java使用构造方法来对单个对象进行初始化操作。与
构造方法作用非常类似的是初始化块,它也可以对对
象进行初始化操作。
使用初始化块
初始化块是Java类里可以出现的第四种成员。
语法格式:
class 类名{
[修饰符 只能是static,静态初始
化块]{
//初始化块的可执行代码
可以定义局部变量、调用其他对象的方法、使用分支
、循环语句等
}
…
}
一个类里可以有多个初始化块;
相同类型的初始化块之间有顺序,前面定义的初始化
块先执行,后面定义的初始化块后执行。
当创建Java对象时,系统总是先调用该类里定义的初
始化块;
如果一个类里定义了两个普通初始化块,则前面定义
的初始化块先执行,后面定义的初始化块后执行。
初始化块虽然也是Java类里的一种成员,但它没有名
字,也就没有标识,因此无法通过类、对象来调用初
始化块;
初始化块只能在创建对象时自动执行而且在执行构造
方法之前执行。
初始块和声明实例属性时所指定的初始值都是该实例
的初始化代码,它们的执行顺序与源程序中排列顺序
相同。
初始化块和构造方法的不同:初始化块是一段
固定的执行代码,它不能接受任何参数。因此初始化
块对同一个类内的属性所进行的初始化处理完全相同
。
用法:如果多个构造方法里有相同的初始化代
码,这些代码无需接受参数,那就可以把他们放在初
始化块中定义。能更好的提高初始化块的复用,提高
整个应用的可维护性。
创建一个Java对象时,不仅会执行该类的初始
化块和构造方法,系统会先执行其父类的初始化块和
构造方法。
如果定义初始化块时使用了static修饰符,则这个初
始化块就变成了静态初始化块,也被称为类初始化块
。
静态初始化块是类相关的,系统将在类初始化阶段执
行静态初始化块,而不是在创建对象时才执行,因此
静态初始块总是比普通初始化块先执行。
静态初始块属于类的静态成员,用于对类属性执行初
始化处理,不能对实例属性进行初始化处理。
系统在类初始化阶段执行静态初始化时,不仅会执行
本类的静态初始化块,还会一直上溯到Object类(如
果它包含静态初始化块)。经过这个过程,才完成了
对类的初始化过程。
静态初始块和声明静态属性时所指定的初始值都是该
类的初始化代码,它们的执行顺序与源程序中排列顺
序相同
单例类
设计模式:是一种问题的解决思想。解决某一类问题
最行之有效的方法。Java有23中设计模式。
单例设计模式:解决一个类在内存中只存在一个对象
。
如果一个类始终只能创建一个实例,则这个类称为单
例(Singleton)类。
想要保证对象的唯一:
1.禁止其他程序自由创建对象:将构造方法私有化,
使用private修饰。
2.为了让其他程序可以访问到该类对象,只能在本类
定义一个对象:在类中创建一个本类对象。
3.为了方便其他程序对该对象的访问,可以对外提供
访问方法:提供一个public方法可以获取该对象。
两种写法:
1.饿汉式:不管你用不用,一开始就建立单例对象,
即先初始化对象。
开发一般使用此写法,安全性
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
2.懒汉式:使用时才建立对象,是延迟加载。
private static Single1 s=null;
private Single1(){}
public static Single1 getInstance(){
if(s==null){
s=new Single1();
}
return s;
}