单例模式
概述: 一个类,只有一个实例。
单例是数据共享和项目安全(配合同步)的重要手段,单例可减低项目的并发性,增加耦合性。
单例模式语法要求:
1.必须有静态属性
2. 构造方法私有化
3. 获取对象采用静态方法
代码示例(饥汉模式):
public class Singleton {
public int count;
private static Singleton instance=new Singleton(10);
private Singleton(int n){
this.count = n;
System.out.println("count = " + this.count);
}
public int getCount(){
return this.count;
}
public static Singleton getInstance(){
return instance.instance;
}
}
public class TestSingleton{
public static void main(String[] args){
Singleton a1 = Singleton.getInstance();
Singleton a2 = Singleton.getInstance();
}
}
Final
final关键字—用于类、方法、变量前。
final类—不可被继承,如java.lang.Math就是一个 final类,不可被继承。
final变量—在初始化后不可改变变量值,用于常量定义。
如果final变量是引用变量,则不可以改变它的引用对象,但可以改变对象的数据(属性)。
final方法—不可被覆盖,除了和private一起用。
Final+变量: Final static int i=5;
一加载类就放在方法区的静态数据区,(也有认为放在静态常量池)。
必须显示初始化,不能重复赋值只能赋值一次,不能默认初始化比如final static int i;
Final +全局变量
在堆中开辟空间,它和静态全局变量一样必须立刻显示初始化,它也是不能第二次赋值。
Final+局部变量
它在栈中开辟空间,它可以不用显示初始化,默认初始化就是个垃圾值,它显示初始化也是只能赋值一次,不能二次赋值。
Fianl+对象
在堆中开辟空间,也不能二次赋值,但属性和方法可以重复使用赋值调用。
Abstract
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是 否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、子类中的抽象方法不能与父类的抽象方法同名。
6、abstract 不能与 final 并列修饰同一个类。
7、abstract 不能与 private、static、final 或 native 并列修饰同一个方法