1.3 对象代码段和静态代码段
什么是代码段?
-
就是个{} 里面包含一堆代码
-
代码段可以写在方法中 , 也可以写在方法外
-
代码段可以方法中和方法外独立存在,也可以配合着 分支结构和循环结构存在
class A{ { ..... } public void t1(){ { ..... } } public void t2(){ if(){ System.out.println() System.out.println() System.out.println() System.out.println() } while(){} } }
方法外的代码端
-
写在方法外,但要写在类里。
-
可以是普通的代码段,也可以是增加了static关键字修饰的代码段
-
前者就称为对象代码段(普通代码段), 后者称为静态代码段
-
对象代码段,在创建对象时,自动执行,每个对象的创建仅执行一次。
如果创建多个对象,这个代码段就会被执行多次。
-
静态代码段,在类加载时,自动执行,且仅执行一次
class A{ { ... } static{ ... } }
扩展
java类在编译时,会自动的提供两种初始化方法
-
<init> 对象的初始化方法 。 其内容来自于构造方法和对象代码段, 如果有构造方法重载的,就会有多个对象初始化方法
-
<clinit>类的初始化方法。没有专门的对应的方法,方法的内容就是静态代码段的内容。
2 单例模式
单例模式是一种设计模式
什么是设计模式?
-
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
设计模式主要分为3大类
-
创建型 : 如何创建对象 , 例如单例模式,如何只创建一个对象。
-
结构型 : 设计不同的执行结构,适合不同的执行场景。 暂不解释。
-
行为型 : 与具体的行为操作有关,例如策略模式,如何根据不同的策略完成功能。
单例模式特点
-
确保在jvm内存中,或在程序执行的过程中,某一个类只会产生一个对象。
-
重点在于是否能想明白 为什么只需要对象创建一次,而不在于如何实现对象只创建一次。
单例模式的实现
-
需要构造方法私有化。 不再使用public修饰构造方法,改用private修饰构造方法
private修饰的方法或者属性只有类自己可以使用。外部类不能使用。
-
定义一个属性,来存储类自身创建的对象
类自身只创建一次
-
提供一个方法,外部使用者可以通过调用这个方法,获得刚刚存入属性中的那个对象
class D{ private D(){} static D d = new D(); public static D getD(){ return d ; } //----------------------- //属性 //方法 }
-
由于外部类调用这个方法的时候,还没拥有D对象, 所以只能通过类调用这个方法。
所以这个方法应该是static方法
-
static方法中不能直接使用非静态的属性,
所以d属性应该也是静态的
-
注意:
单例模式的设计与类对象应该具备哪些属性和方法无关。
扩展:懒汉式和饿汉式
-
饿汉式的单例模式:在类加载时就完成对象的创建,并将其存入属性变量
特点:空间换时间
class D{ private D(){} static D d = new D(); public static D getD(){ return d ; } }
-
懒汉式的单例模式:在类加载时先不创建对象, 第一次请求对象时再创建对象
特点:时间换空间
class D{ private D(){} static D d ; public static D getD(){ if(d == null){ //还没有创建呢 d = new D(); } return d ; } }