如果一个类始终只创建一个实例,则这个类成为单例类。把构造器用private修饰,提供一个public方法来调用构造器用于创建对象。且此方法需要用static修饰,因为调用该方法前还不存在对象,故只能通过类来调用,还需要定义一个成员变量来保存创建的对象,由于需要被上面的静态成员函数访问,故也需要用static修饰。
class Singleton
{
private static Singleton Instance;
private Singleton(){ }
public static Singleton getInstance()
{
if(Instance == null)
Instance = new Singleton();
return Instance;
}
}
final修饰变量时表示一旦变量获得了初始值以后就不可更改。修饰成员变量时,对于类变量,可以在静态初始化块赋值或者声明式给定默认值;对于实例变量,必须在初始化块、声明该变量或者构造器中给定初值。
final修饰局部变量时,既可以在定义时指定默认值,也可以不指定而后再赋值。但是一旦赋值就不可更改。
对于final修饰的引用变量,只保证这个引用变量所指向的地址不改变,但这个对象可以改变。
final修饰的变量满足以下三个条件时相当于宏变量:使用final修饰,定义该final变量时指定了初始值,该初始值在编译时可以确定(没有访问普通变量、调用方法)
final修饰的方法不可被重写,但可以被重载。
final修饰的类不可以有子类
不可变类是指创建该类的实例后,实例的field是不可改变的。
abstract修饰的类为抽象类,含有抽象方法的类为抽象类,是从多个类中抽象出来的模板,这个类只能被继承,abstract修饰的方法时表明必须由子类实现即重写,故abstract和final不能同时使用
抽象类是从多个类中抽象出来的模板,如果抽象的更彻底,那就得到一种更特殊的“抽象类”,接口。接口里不能包含普通方法,全都是抽象方法。