final的用法:
* final关键字修饰基本类型变量
final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的,因此变量也必须在声明时或者在构造方法中被初始化(不会默认初始化,默认初始化的只有普通的非final属性,,否则出现编译错误。
编译器在编译时期就对该数据进行替换甚至执行计算。
public class Test{
final int m = 0;
final int n;
public TestFinal(int n) {
this.n = n;
}
}
* final关键字修饰引用类型变量
final关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。
* final关键字修饰方法参数
final关键字修饰修饰方法参数时,表示可以读取使用该参数,但是无法改变该参数的值。
public void test(final int i) {
//i++; //i是final类型的,值不允许改变的.
System.out.print(i);
}
* final关键字修饰方法
final关键字修饰一个函数的时候,该函数不能被重写(override)。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
* final关键字修饰类
final关键字修饰一个类的时候,该类不能被继承。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
static final的用法:
同时使用static和final修饰的成员在内存中只占据一段不能改变的存储空间。
static final修饰属性表示一旦赋值后不能修改其引用,基本类型常量不能修改其值。static final修饰的属性只能在两种情况下初始化:定义时或类的静态块中。(特别对于初始化时候调用抛出异常的构造函数,初始化方法如下,特别是在实现单例模式时)
class A
{
private final static A a;
private final static int b;;
static
{
try
{
b = 1;
a = new A();
}catch(Exception e)
{
throw new RuntimeException(e); //必须有,不然不能完成常量的正确初始化
}
}
A() throws Exception{}
}
static final修饰方法表示该方法不能重写,可以在不new对象的情况下调用
常量的修饰符一般为: public static final