final關鍵字
一、final關鍵字的概述
學習了繼承後,我們知道,子類可以在父類的基礎上改寫父類內容,比如,方法重寫.那麼我們能不能隨意的繼承API中提供的類,改寫其內容呢?顯然這是不合適的.爲了避免這種隨意的改寫的情況,java提供了final
關鍵字,用於修改不可改變內容.
- final :不可改變.可以修飾類,方法和變量.
二、fianl關鍵字的用法
2.1fianl用於修飾類
格式如下:
final class 類名 {
}
注意事項 :被final
修飾的類是不能被繼承的,但內容可以修改.
2.2fianl用於修飾成員方法
格式如下:
權限修飾符 final 返回值類型 方法名 (參數列表) {
}
注意事項 :被final
修飾的方法不能被重寫,重寫時就會編譯報錯.
2.3fianl用於修飾局部變量
-
局部變量——基本類型
基本類型的局部變量,被
final
修飾後,只能賦值一次,不能更改.代碼如下:public class FinalDemo1 { public static void main(String[] args) { // 聲明變量,使用final修飾 final int a; // 第一次賦值 a = 10; // 第二次賦值 a = 20; // 報錯,不可重新賦值 // 聲明變量,直接賦值,使用final修飾 final int b = 10; // 第二次賦值 b = 20; // 報錯,不可重新賦值 } }
-
局部變量——應用類型
引用類型的局部變量,被
final
修飾後,只能指向一個對象,地址不能在更改.但不影響內部的成員變量值的修改,代碼如下:public class FinalDemo2 { public static void main(String[] args) { // 創建 User 對象 final User u = new User(); // 創建 另一個 User對象 u = new User(); // 報錯,指向了新的對象,地址值改變。 // 調用setName方法 u.setName("張三"); // 可以修改 } }
-
2.4fianl用於修飾成員變量
成員變量涉及到初始化的問題初始化方式有兩種,只能二選一:
-
顯示初始化:
public class User { final String USERNAME = "張三"; private int age; }
-
構造方法初始化:
public class User { final String USERNAME ; private int age; public User(String username, int age) { this.USERNAME = username; this.age = age; } }
總結 :
-
被
final
修飾的常量名稱,一般都有書寫規範,所有字母都大寫.final: 概述:關鍵字,用於修飾不可改變內容 使用:final關鍵字可以修飾類,方法,變量 final關鍵字修飾類:被final修飾的類是不能被繼承的 格式: public final class 類名{ } final關鍵字修飾方法:被final修飾的方法是不能被重寫的 格式: 權限修飾符 final 返回值類型 方法名(參數列表){ } final關鍵字修飾變量:被final修飾的變量,只能賦值一次,不能重複賦值 格式: final 數據類型 變量名 = 值; 推薦 final 數據類型 變量名; 變量名 = 值; =========================================================== // final關鍵字修飾局部變量: 基本數據類型,引用數據類型 // final關鍵字修飾局部變量: 基本數據類型 final int NUM = 10; // num = 20; 錯誤的,因爲num被final修飾,變成了常量,常量只能賦值一次 System.out.println(NUM);// 10 final int NUM2; NUM2 = 100; // num2 = 1000; 錯誤的,因爲num2被final修飾,變成了常量,常量只能賦值一次 System.out.println(NUM2);//100 =========================================================== // final關鍵字修飾局部變量: 引用數據類型 final Animal anl = new Animal(); anl.name = "jack"; System.out.println(anl.name);// jack // anl = new Animal();錯誤的,因爲anl被final修飾,變成了常量,常量只能賦值一次 anl.name = "rose"; System.out.println(anl.name);// rose // final關鍵字修飾成員變量:只能賦值一次 final int AGE = 18;// 直接賦值 final int WEIGHT; String name; // 通過構造方式賦值: 一定要保證所有構造方法都可以給該常量賦值 public Dog(){ this.WEIGHT = 30; } public Dog(String name){ this.WEIGHT = 30; this.name = name; }