Java中final关键字具有什么功能呢?
下文笔者讲述final关键字的功能大全,
学习完本篇之后,你将彻底掌握final关键字的用法,如下所示
学习完本篇之后,你将彻底掌握final关键字的用法,如下所示
final关键字的三大用途
修饰变量 --变量会编程常量 修饰类 --变为不能被继承的类 修饰方法 --变成不能被重写的方法
修饰变量
当使用final关键字 修饰基本数据类型的变量 则该变量为常量 变量的值无法修改 当使用final关键字 修饰引用数据类型的变量(如对象、数组等) 则变量中存储的对象地址是不能改变的 但是可以修改变量指向的对象本身中的内容 当使用final关键字 修饰类的成员变量 则必须立即赋值 否则编译会报错例:
import java.util.Arrays; public class TestClass { // 正确,因为立即被初始化 private final int a = 10; // 正确,它在构造方法中被初始化了 private final int b; // 正确:在实例代码块中初始化 private final int c; // 正确:静态变量,在静态块中初始化 private static final int d; // 错误:变量没有初始化 //private static final int e; //private final int f; // 静态代码块 static { // 初始化 d d = 10; } // 实例代码块 { // 初始化 c c = 10; } // 构造方法 public TestClass() { // 初始化变量 b b = 10; } public static void main(String[] args) { // 正确,立即初始化 final int val = 100; System.out.println("val=" + val); // 正确,紧接着初始化 final int val2; val2 = 100; System.out.println("val2=" + val2); // 错误:不能给 final 变量重新赋值 //val = 200; final int[] valArray = new int[10]; System.out.println(Arrays.toString(valArray)); // 错误:不能给 final 变量重新赋值 //valArray = new int[20]; // 修改变量指向对象的内容 valArray[0] = 10; valArray[1] = 20; System.out.println(Arrays.toString(valArray)); } } //运行以上代码,将输出以下信息 val=100 val2=100 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [10, 20, 0, 0, 0, 0, 0, 0, 0, 0]
修饰方法
当使用final 关键字修饰方法时 这个方法无法被子类重写 该方法仍然可以被继承例:
public class TestClass { class A { // 声明了一个最终方法,该方法不能被子类重写 public final void show(String msg) { System.out.println(msg); } } class B extends A { // 错误:因为父类的 show() 方法是 final 的,不能被子类重写 /*public final void show(String msg) { System.out.println(msg); }*/ } public static void main(String[] args) { TestClass testClass = new TestClass(); A a = testClass.new A(); a.show("hello A.java"); B b = testClass.new B(); b.show("hello B.java"); } } //运行以上代码,将输出以下信息 hello A.java hello B.java修饰类
当用 final 关键字修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。例:
public class TestClass { final class A { // 声明了一个最终方法,该方法不能被子类重写 public void show(String msg) { System.out.println(msg); } } // 错误:A 类是最终类,不能被继承 // class B extends A {} public static void main(String[] args) { TestClass testClass = new TestClass(); A a = testClass.new A(); a.show("hello A.java"); } } //运行以上代码,将输出以下信息 hello A.java
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。