final关键字:最终的
final用来修饰的结构:类、方法、变量
final修饰一个类代表不能继承
如:StringBuffer类、String类、System类
final修饰一个方法代表不能重写【可以被重载】
如:Object类的中getClass();【查看代码:使用ctrl+shift+t查找Object的源代码-->ctrl+o找到getClass方法】
final修饰变量,此时“变量”就称为一个常量,不能再被修改。
final修饰属性:可以考虑的位置有:显示初始化、代码块中赋值、构造器中初始化
当属性值每次都不一样的时候在构造器初始化的位置
当属性值要固定是在显示初始化的位置
当调用方法,方法可能抛异常的时候放在代码块中
final修饰局部变量
尤其是使用final修饰形参时,表示形参时一个常量,当调用此方法时,给常量赋一个实参,以后,就只能在方法体内使用此形参,但不能进行重新赋值
public void show(final int num) {
//报错:The final local variable num cannot be assigned. It must be blank and not using a compound assignment
num+=1;//当形参为final类型,在此方法体中此值不能再赋值
System.out.println(num);
}
static final :用来修饰成员变量、方法、内部类
成员变量:全局变量【值不变,接口中的属性皆是】
成员方法:不能被重写
内部类:属于外部类,且不能被继承
static可以修饰内部类、方法、成员变量、代码块
final可以修饰内部类、成员变量、成员方法
–>static final可以修饰成员方法、内部类、成员变量
例题
题目一:final修饰基本数据类型
`public int add(final int x) {
return x++;//因为x++会给x自增,此时改为return x+1;则不会报错
}
题目二:final修饰引用数据类型
public class Something {
public static void main(String[] args) {
Other other=new Other();
new Something().addOne(other);
}
public void addOne(final Other other) {
// final修饰引用类型代表指向同一个对象,其对象所指的值是会随着其值的变化而变化的
// o=new Other();
other.i++;
}
}
class Other{
public int i;
}
总结
final修饰属性表示为全局变量【修饰基本数据类型不能再赋值,为常量;修饰引用数据类型表示指向同一个地址,里面的值可以更改】
修饰方法表示不能重写
修饰类表示不能继承