单例设计模式
- 饿汉式
- 构造器私有化,防止用户new对象出来
- 在类的内部创建一个对象
- 向外给出对象的静态公共方法
代码展示
public class SingletonModeTest {
public static void main(String[] args) {
System.out.println(SingletonMode.getInstance());
System.out.println(SingletonMode.getInstance());
}
}
class SingletonMode {
private String name;
private static SingletonMode instance = new SingletonMode("singleton");
private SingletonMode(String name) {
this.name = name;
}
public static SingletonMode getInstance() {
return instance;
}
}
2.懒汉式
class SingletonMode1 {
private String name;
private static SingletonMode1 instance = null;
private SingletonMode1(String name) {
this.name = name;
}
// 只有当调用时才会创建
public static SingletonMode1 getInstance() {
if (instance == null) instance = new SingletonMode1("singleton");
return instance;
}
}
java.lang.Runtime就是经典的饿汉式
final关键字
- final 修饰类,表示类不能被继承, java.lang.String类就被final修饰
- final 修饰方法,表示方法不能被重写override
- final 修饰变量,表示该变量为常量,不能被修改,就像c里面的const关键字
- 属性带final可以在构造函数或者代码块里完成初始化
class A {
final int a = 1;
final int b;
final int c;
{
c = 20;
}
A(int b) {
this.b = b;
}
}
- 可以让类不被加载
public class Main {
public static void main(String[] args) {
System.out.println(A.x); // static 代码块不会被执行
}
}
class A {
public static final int x = 20;
static {
System.out.println("static" + x);
}
}
抽象类
1.关键字为abstract
2.当一个类中有方法为abstract时,要将该类声明为abstract class
3.抽象类不能被实例化
4.抽象类不一定要包含抽象方法xxx
5.因为private, final, static描述的方法都不能被子类重写,所以不能配合abstract使用
接口
interface
1.接口中的方法没有方法体,且省略了 public abstract
2.接口中的属性都是public static final 类型,不可改变
3.接口不能继承其他类,但是可以继承其他接口
4.接口只能被类实现,或被其他接口继承