Java中final关键字的用法

四种用法:

① 修饰一个类
② 修饰一个方法
③ 修饰一个局部变量
④ 修饰一个成员变量

1、修饰一个类

public final class 类名称 {
		...
	}

作用:被final修饰的类不可以被继承,进而其所有的方法都无法被重写。

2、修饰一个成员变量

class Person {

//    final int height;  [0]报错,必须赋初值

    // 声明为final的成员变量必须赋初值(两种方式)

    // 方法一:声明时直接赋值;[1]
//    final int height = 180;
    // 方法二: 构造器赋值;[2]
    final int height;
    Person(int height) {
        this.height = height;
    }
}

作用:被final修饰的成员变量一旦被赋值便不可被改变
- 对于基本数据类型:变量的值不可变
- 对于引用类型:变量的地址不可变
说明:
1、被声明为final的成员变量必须被赋初值,否则报错,如[0]处;
2、有两种对成员变量进行赋初值的方式,且这两种方式只能存在一个;
方式1:在声明时直接赋值,如[1]处
方式2:在有参构造器中赋值,如[2]处

3、修饰一个方法

	修饰符 final 返回值类型 方法名称(参数列表) {
		方法体
	}

作用:该方法不能被重写

4、修饰一个局部变量

    void setAge (int a) {
        final int dadAge;// [1]
//        dadAge = 1;// [2]
        final int age = a;
//        age += 1; // [3] 报错
        System.out.println(age);
//        System.out.println(dadAge); // [4] 报错
    }

当final关键字修饰一个局部变量时,该变量同样不可变。
注意:
[1] 可以不赋初值,编译器不会报错
[2] 也可以赋初值
[3] 报错,一旦被赋初值,便不可以被修改
[4] 报错,未赋初值不可直接被使用
补充说明:局部变量不可变意味着,在当前执行该方法时,被final修饰的局部变量一旦被赋初值后便不可改变;但是方法结束后,局部变量即被销毁。

总结

简单的说:
(1) 作用于类时,类不可被继承;
(2)作用于方法时,方法不可被重写;
(3) 作用于变量时,在该变量的生命周期内,一旦被赋初值后便不可被修改。
推论:
(1)abstract与final是天然的矛盾,因为抽象类就是需要被继承的,抽象方法就是需要被重写的,所以两个关键词不可同时使用;
(2)private与final关键字同时修饰方法时,IDEA会提示移除final关键字,因为private的可见性是当前类,所以天然就不可被子类重写,所以在修饰方法的层面上,private包含了final关键字的作用。

你可能感兴趣的:(Java基础,java)