一 final关键字:
①final修饰的类不能被继承
②final修饰的方法不能被重写
如果父类用private final来修饰,private修饰的方法不能在本类外使用,如果子类方法与父类方法同名,此时子类是不知道父类用同名的方法的,子类相当于自己又创建了一个新的方法。
③final修饰的变量是常量,在类的加载完成时(在创建对象之前)就已经赋值
④final修饰的引用类型变量,仅仅保证地址值不变,而地址值的内容可以改变。
因为引用类型指向的是一个地址,就像你只记住了别人的门牌号,而别人家的东西你不知道。
注意:
(1)final修饰的变量在类加载完成时就已经赋值,且只能赋值一次,不能改变。
(2)final修饰而不被static修饰的变量,可以在构造代码块,静态代码块,构造函数,直接赋值法进行赋值。
final’修饰同时被static修饰的变量,可以在静态代码块,直接赋值法进行赋值
二.final在单例模式中的应用
饿汉式
class Single
{
private static final s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
]
懒汉式
class Single2
{
private static s=null;
private Single2(){}
public static Single2 getInstance()
{
if(s==null)
{
s=new Single2();
return s;
}
}
}
为什么饿汗式用final而懒汉式不用呢?
因为用final修饰的变量必须在类加载完成时就已经进行赋值。而如果在懒汉式中用final(在初始化进行时就必须赋值)就不是懒汉式了。