詳解Java中的final關鍵字
概述
子類可以在父類的基礎上改寫父類內容,比如,方法重寫。那么我們能不能隨意的繼承API中提供的類,改寫其內容呢?顯然這是不合適的。為了避免這種隨意改寫的情況,Java提供了final 關鍵字,用于修飾不可改變內容。 final: 不可改變??梢杂糜谛揎楊?、方法和變量。
- 類:被修飾的類,不能被繼承。
- 方法:被修飾的方法,不能被重寫。
- 變量:被修飾的變量,不能被重新賦值。
使用方式
修飾類
格式如下:
final class 類名 { }
查詢API發(fā)現(xiàn)像 public final class String 、public final class Math 、public final class Scanner 等,很多我們學習過的類,都是被final修飾的,目的就是供我們使用,而不讓我們所以改變其內容。
注意: 如果一個類被final修飾那么這個類不能有任何的子類。 一個類如果是final的,那么其中所有的成員方法都無法進行覆蓋重寫(因為沒子類。)
修飾方法
格式如下:
修飾符 final 返回值類型 方法名(參數(shù)列表){
//方法體
}
重寫被 final 修飾的方法,編譯時就會報錯。
對于類、方法來說,abstract關鍵字和final關鍵字不能同時使用,因為矛盾。有抽象方法的abstract類被繼承時,其中的方法必須被子類Override,而final不能被Override。
修飾變量
局部變量—基本類型
基本類型的局部變量,被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; // 報錯,不可重新賦值
}
}思考,如下兩種寫法,哪種可以通過編譯? 寫法1:
final int c = 0;
for (int i = 0; i < 10; i++) {
c = i;
System.out.println(c);
}寫法2:
for (int i = 0; i < 10; i++) {
final int c = i;
System.out.println(c);
}根據(jù) final 的定義,寫法1報錯!寫法2,為什么通過編譯呢?因為每次循環(huán),都是一次新的變量c。這也是大家需要注意的地方。
局部變量—引用類型
引用類型的局部變量,被final修飾后,只能指向一個對象,地址不能再更改。但是不影響對象內部的成員變量值的修改,代碼如下:
成員變量
成員變量涉及到初始化的問題,初始化方式有兩種,只能二選一: 顯式初始化:
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修飾的常量名稱,一般都有書寫規(guī)范,所有字母都大寫。
到此這篇關于詳解Java中的final關鍵字的文章就介紹到這了,更多相關Java final關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java ThreadPoolExecutor 線程池的使用介紹
Executors 是一個Java中的工具類. 提供工廠方法來創(chuàng)建不同類型的線程池,這篇文章主要介紹了Java ThreadPoolExecutor 線程池的使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
如何解決redis的NOAUTH Authentication required異常
這篇文章主要介紹了Jedis異常解決:NOAUTH Authentication required,,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值2019-07-07
spring的TransactionalEventListener事務感知源碼解析
這篇文章主要為大家介紹了spring的TransactionalEventListener事務感知源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
SpringBoot中ApplicationEvent的使用步驟詳解
ApplicationEvent類似于MQ,是Spring提供的一種發(fā)布訂閱模式的事件處理方式,本文給大家介紹SpringBoot中ApplicationEvent的使用步驟詳解,感興趣的朋友跟隨小編一起看看吧2024-04-04

