内容
1.单例模式
2.super
一.单例模式
单例模式是23种设计模式中最简单的一种设计模式。
1.目的
为了保证JVM中某一个类只有一个对象,目的是为了节省内存的开销
2.单例模式要领:
①.构造方法私有化
②.对外提供一个公开的、静态的(因为一开始没法创建对象)获取当前类型对象的方法
③.提供一个当前类型的静态变量
3.使用示例
public class SingleTon{
//静态变量
private static SingleTon s;
//将构造方法私有化
private SingleTon();
//对外提供一个公开获取SingTon对象的方法
public static SingTon getInstance(){
if(s == null){
s = new SingleTon();
}
return s;
}
}
4.单例模式种类
懒汉式单例:用到对象的时候才会创建对象,就像上面的代码
饿汉式单例:在类加载阶段就创建了对象,比如下面的代码
public class SingleTon{
//静态变量
private static SingleTon s = new SingleTon();
//将构造方法私有化
private SingleTon();
//对外提供一个公开获取SingTon对象的方法
public static SingTon getInstance(){
return s;
}
}
懒汉式比较好一点
二.super
1.简单介绍
①.super不是引用类型,super中存储的不是内存地址,和this不一样,super指向的不是父类对象
②.super代表的是当前子类对象中的父类型特征
2.何时用
子类和父类中都有某个数据/方法,子类将父类中的重写了,比如name,如果想要访问父类中的,就需要加super.。如果不加,就默认是this.也就是子类中的
3.用在哪
super可以用在成员方法中,也可以用在构造方法中,不能用在静态方法中(这个和this一样)
4..super在构造方法中:
①语法
super(实参);
②作用:
通过子类的构造方法去调用父类的构造方法,作用是给当前子类对象中的父类型特征赋值。所以父类的构造方法不是继承到子类的,而是子类调用的。
③语法规则:
一个构造方法第一行如果没有this(...),也没有显示的去调用super(...),系统会默认调用super(...);
④注意
(1)super();的调用只能放在构造方法的第一行,这一点和this(...)一样。
(2)super()不会创建父类对象,虽然调用了父类的构造函数,
所以构造方法执行不一定创建对象
(3)结论:
Ⅰ.Java语言中只要是创建java对象,那么Object中的无参数构造方法一定会执行
Ⅱsuper(...)和this(...)不能共存
⑤单例模式缺点:(由super推出的)
无法被继承,没有子类。
因为构造方法都是private的,子类也无法使用super调用父类的(最大的缺点)

