final关键字可以对类、方法、成员变量、局部变量进行修饰,下面我将会从这几个方面讲解final关键字如何使用和理解。
一、final关键字修饰类
当用final关键字修饰一个类时表明这个类无法被继承 ,如果你想设计一个类不想被继承,那么就加上final关键字。
二、final关键字修饰方法
当用final关键字修饰一个方法时,这个方法无法被Override。
三、final关键字修饰成员变量
成员变量被final关键字修饰后,只能在定义和构造函数时初始化值,而无法被成员函数重新赋值。
四、final关键字修饰局部变量
当final关键字修饰局部变量时,也是只能再定义时进行初始化,无法被重新赋值。final关键字修饰基本数据类型和String类型时,如果在编译期间能确定值,就会把它当做常量来使用,在所有用到的地方直接用字符串代替,类似于C语言的宏。如果是在运行期间才能确定,则在运行时用到的地方使用值代替。我们可以看以下的例子。
由于str2在编译时就能确定值,所以str4引用指向的地址实际上和str一样,指向同一个字符串常量地址。而str1只能在运行时才能知道值,所以str3指向的是栈里面的地址,所以输出结果分别是false和true。
五、final关键字修饰对象实例
被final关键字修饰的对象实例,虽然不能指向其他对象的引用,但是可以修改引用指向对象的内容。
final关键字修饰的对象实例,无法指向其他对象实例的引用。
我们再来看一下是否可以修改指向的对象内容。
输出值为2,说明对象的内容被改变了!
六、final修饰形参
被final修饰的基本数据类型通过形参传递是无法修改外部变量也无法修改形参的值,类似于C++的const关键字修饰基本数据类型。但是传递引用类型则可以修改外部变量的值,形参却无法引用其他对象实例,类似于C++的常量指针,我们可以看一下下面的例子。
传递基本数据类型:
传递引用类型:
外部变量的对象内容被修改了!