1.单例:当有些类只能被程序创建一次时候,需要使用单例类
原则:为了避免被重复创建,将构造方法使用private修饰。根据良好的封装原理,被封装成private就还需要一个public方法作为访问点,且需要static修饰。除此之外,还需要保存已经缓存好的对象,为private。由于方法为static,故这个对象也需要为static才能访问。
<简单例子>
public class SingleClass {
private static SingleClass instance;
private SingleClass() {
}
public static SingleClass getInstance(){
if(instance==null){
instance=new SingleClass();
}
return instance;
}
}
<双重检查锁机制>
public class Singleton {
/**
* 单例模式:
* (1)构造方法私有化
* (2)对外提供共有可调用的方法
* (3)保证线程安全
*/
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
//保证了避免不必要的同步
synchronized (Singleton.class) {
if (instance == null) {
//保证null才会创建实例
instance = new Singleton();
}
}
}
return instance;
}
}
2.final:final修饰的成员变量必须由程序员显示给定初始值
特点:可用于修饰类、变量、方法。一旦获得初始值就不可以被改变再重新赋值。
final变量:如果没有给定初始值,就会保持系统分配的初始值。还由于他一旦初始不能再重新赋值,这样就失去了其实际意义。所以必须显示给定初始值。如果在定义时候没有给定初始值,可以在后面代码进行赋值,但是只能有一次。
final方法:final修饰的方法不能被重写
final修饰的方法只是不能重写,但是可以重载
3.抽象类和抽象方法
需要使用关键词abstract。有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。抽象类不能用于创建实例,只能被其他子类继承
规则如下:
a.抽象方法不能有方法体(private abstract void test();是抽象方法 private void test(){}是普通方法,只是方法体为空)
b.抽象类不能被实例化,无法使用new关键字来调用
c.抽象类的构造器不能由于创建实例,主要用于被其子类调用
由于final修饰的类不能被继承,修饰的方法不能被重写。而abstract修饰的类只能被继承使用,abstract修饰的方法只能被重写。故final和abstract永远无法一起使用。
static修饰的方法,表明该方法属于类,可以直接调用。但若用abstract修饰,由于方法体为空肯定报错。故abstract和static不能同时使用。
方法使用abstract,必须重写才有意义。故private和abstract无法同时使用
模板模式:
a.父类中只定义需要使用的某些方法,把不能实现的部分定义成抽象方法,由子类去实现
b.父类提供的方法可以是通用方法,并不一定都需要父类去实现,可以依赖子类来辅助
4.接口
包含:成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法或默认方法)、内部类(包括内部接口,枚举)
对于接口的成员变量:系统会自动增加static和final修饰,即会自动增加public static final形式
对于接口的方法:系统会自动给普通方法增加public abstract修饰。普通方法必须是无方法体,类方法、默认方法必须有方法体

网友评论