final修饰的变量
final修饰的成员变量一定由程序员指定初始值,并且一经赋值后,变量值将无法被修改
实例成员变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| final class test3{ final int height = 180; final String name; final int age; {
name = "默认"; } public test3(){
age = 20; } }
|
类成员变量
1 2 3 4 5 6 7 8 9 10 11 12
| final class test4{
final static age = 20; final static String name; static {
name = "默认"; } }
|
局部变量
1 2 3 4 5 6 7 8 9 10 11 12
| final class test5{ public static void methods1(){ final int a = 10; final String b = "默认值"; } public void methods2(){ final int a = 10; final String b = "默认值"; }
}
|
引用类型
final修饰引用类型的变量时,只保证这个引用类型变量引用的地址不会发生改变,但对象可以被改变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class finalTest { public static void main(String[] args){
final finalObj obj = new finalObj("小红");
obj.setName("小刚"); System.out.println(obj.getName()); } }
final class finalObj{ private String name;
public void setName(String name){ this.name = name; }
public String getName(){ return this.name; }
public finalObj(String name){ this.name = name; } }
|
对于final变量来说,不管是类变量、实例变量、局部变量,只要满足下面三个条件,就不是变量,而相当于一个直接量
- 使用final修饰符修饰
- 在定义该变量时指定了初始值
- 该初始值可以在编译时就被确定下来
final修饰的方法
final修饰的方法不可被重写
1 2 3 4 5 6 7 8 9 10 11
| public class finalTest { final public void 铠甲勇士(){ System.out.println("铠甲勇士"); } } class final方法重写 extends finalTest{ @Override public void 铠甲勇士(){
} }
|
final修饰的类
final修饰的类不可被继承
完~