有参构造方法和无参构造方法
/**
* @Description:for test constructor
* @Author:Spike Wong
* @Date:2022/5/23
*/
public class ConstructorDemo1 {
public ConstructorDemo1(){
this("test"); //调用有参数构造器
System.out.println("无参构造方法");
}
public ConstructorDemo1(String str){
System.out.println("有参构造方法");
}
public static void main(String[] args) {
/*输出结果
有参数构造方法
无参数构造方法
*/
ConstructorDemo1 constructorDemo =new ConstructorDemo1();
}
}
要点:
1.存在有参数构造器的情况下,如果没有主动写无参构造器,不会自动创建无参构造方法;
2.没写构造器,系统会为该类方法自动创建一个无参构造方法
饿汉单例:
/**
* @Description:饿汉单例模式
* @Author:Spike Wong
* @Date:2022/5/23
*/
public class ConstructorDemo2 {
public static ConstructorDemo2 instance; // 下方有构造代码相当于 =new ConstructorDemo2();
//静态代码块初始化;
static {
instance = new ConstructorDemo2();
}
//私有这个构造器,不被其他类调用
private ConstructorDemo2() {
}
public static void main(String[] args) {
ConstructorDemo2 a1 = ConstructorDemo2.instance;
ConstructorDemo2 a2 = ConstructorDemo2.instance;
ConstructorDemo2 a3 = instance; //本类可以直接用;
System.out.println(a1 == a2); //true
System.out.println(a1 == a3); //true
System.out.println(a2 == a3); //true
//都是同一个对象
}
}
/*输出结果:
true
true
true
*/
饿汉单例要点:
1.主动暴露一个静态变量instance;
2.私有化这个构造方法,不让外部调用;
3.new或者,使用静态代码块初始化均可以;
懒汉单例:
/**
* @Description:懒汉模式
* @Author:Spike Wong
* @Date:2022/5/23
*/
public class ConstructorDemo3 {
//私有化这个单例,不要通过.的方式来获取,会被调用且成为null
private static ConstructorDemo3 instance;
private ConstructorDemo3() {
}
//需要像外部提供一个方法,对外返回对象
public static ConstructorDemo3 getInstance() {
if (instance == null) {
instance = new ConstructorDemo3();
System.out.println("还没有,我要创建了~");
}
System.out.println("存在实例了!我直接返回~");
return instance;
}
public static void main(String[] args) {
ConstructorDemo3 a1 = ConstructorDemo3.getInstance();
System.out.println("-----------");
ConstructorDemo3 a2 = ConstructorDemo3.getInstance();
System.out.println(a1 == a2);
}
}
/*输出结果:
还没有,我要创建了~
存在实例了!我直接返回~
-----------
存在实例了!我直接返回~
true
*/
懒汉单例要点:
1.私有化这个单例对象,不要直接被外部调用,否则会为空;
2.私有化构造方法,不要直接被外部调用;
3.暴露一个静态getInstance方法,判断instance是否为空做出生成或return该对象。