首頁 Java Java面試題 面試官:請詳細說明final關鍵字的作用,以及它與static的差異

面試官:請詳細說明final關鍵字的作用,以及它與static的差異

Mar 08, 2021 am 10:27 AM
final static 關鍵字 面試

面試官:請詳細說明final關鍵字的作用,以及它與static的差異

前言:

果不其然,在上次的面試中面試官又問了這樣的問題:請你說下final關鍵字的具體含義,並詳細講解它的作用以及它與static的區別。為了讓正在面試中的各位重視這個問題,特意將答案整理出來以供大家參考。

1、final關鍵字的意思

final表面意思是不可更改的,恆量的意思;類似C語言中的const關鍵字,指的是無法改變的量,這與靜態標量static是有差別的,靜態變數指的是只有一份儲存空間,值是可以改變的。使用final一定原因是出於軟體設計的角度,因為別人看到final這個關鍵字就知道是什麼意思,達到心領神會的效果,但也正是由於這種"語義"的存在,在程式設計中要謹慎使用,以免誤用。

在Java中final修飾的是常數,而且變數名稱要大寫;

Math類別:public static final double E = 2.7182818284590452354;public static final double PI = 3.1415926535846. .....java源碼中好多變數都用final修飾

2、final的作用

final根據修飾位置的不同作用也不相同,針對三種情況:

(1)修飾變量,被final修飾的變數必須初始化,賦初值後不能再重新賦值。

注意:局部變數不在我們討論的範疇,因為局部變數本身就有作用範圍,不使用private、public等詞修飾。

(2)修飾方法,被final修飾的方法代表不能重寫。

(3)修飾類,被final修飾的類,不能夠被繼承。

注意:final修飾的類,類別中的所有成員方法都被隱式地指定為final方法。

2.1、final修飾變數


被final修飾的變數必須顯示的初始化,初始化可以以三種方式:1)定義時初始化,2)在建構器中設置值,3)在非靜態區塊中為final實例變數設定值。

final修飾變數指的是:這個變數被初始化後便不可改變,這裡不可改變的意思對基本型別來說是其值不可變,而對於物件變數來說其引用不可變,即不能再指向其他的對象。

public class Test01{    
    final int x1= 10000;    
    final int x2;    
    final int x3;
    {
       x2 = 20000;
        }
    Public exe3(){        
        this.x3 = 3000;
        }
}
登入後複製

如果final修飾的變數是物件類型,那麼不可更改指的是該變數不可以再指向別的對象,但是當物件的值時可以更改的,例如:

final Operate operate = new Operate() ;// operate有一个普通变量i初始化为10operate.i = 11;
operate.i = 12;
System.out.println(operate.i); //输出12上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。
登入後複製

3、final和static的區別

static作用於成員變數用來表示只保存一份副本,而final的作用是用來保證變數不可變,看一下網路上的一個例子:

public class Test {
    public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);
 
    }
}
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}
//运行结果,两次打印,j的值都是一样的,j是static类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的。
登入後複製

(學習影片分享:

java影片教學

4、其他final相關的知識


(1)使用final關鍵字,如果編譯器能夠在編譯階段確定某變數的值,那麼編譯器就會把該變數當作編譯期常數來使用。如果需要在執行時間確定,那麼編譯器就不會最佳化相關程式碼。

public class Test {    
    public static void main(String[] args)  {
        String a = "hello2";  
        final String b = "hello";
        String d = "hello";
        String c = b + 2;  
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}
    //final类型,在编译阶段能够确定值。
    //非final类型在编译阶段确定不了
    输出:
        true
        false
    public class Test {    
            public static void main(String[] args)  {
            String a = "hello2";  
            final String b = getHello();
            String c = b + 2;  
            System.out.println((a == c));
 
        }     
    public static String getHello() {        
        return "hello";
    }
}
//即便是final类型,编译阶段也确定不了值。输出false
登入後複製

(2)注意不要將final與finally、finalize()等搞混。

(3)將類別、方法、變數宣告為final能夠提高效能,這樣JVM就有機會進行估計,然後最佳化。

(4)介面中的變數都是public static final 的。

相關推薦:

java面試題目及答案

原文連結:

http://www.cnblogs.com/liun1994/p/6691094.html

原文作者:隨風浪子90

以上是面試官:請詳細說明final關鍵字的作用,以及它與static的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

聊聊如何選擇一個最好的Node.js Docker映像? 聊聊如何選擇一個最好的Node.js Docker映像? Dec 13, 2022 pm 08:00 PM

選擇一個Node的Docker映像看起來像是小事,但是映像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們要如何選擇一個最好Node.js Docker映像呢?

Java中final、finally、finalize的區別 Java中final、finally、finalize的區別 Feb 19, 2024 pm 12:16 PM

Java中final、finally、finalize的區別,需要具體程式碼範例在Java程式設計中,經常會遇到final、finally、finalize這三個關鍵字,它們雖然拼字相似,但卻有不同的意思和用法。本文將詳細解釋這三個關鍵字的區別,同時給出程式碼範例以幫助讀者更好地理解。一、final關鍵字final關鍵字可以用於類別、方法和變數。它的作用是使被修飾的類

如何解決跨域?常見解決方案淺析 如何解決跨域?常見解決方案淺析 Apr 25, 2023 pm 07:57 PM

跨域是開發中常會遇到的場景,也是面試中常會討論的問題。掌握常見的跨域解決方案及其背後的原理,不僅可以提高我們的開發效率,還能在面試中表現的更加

在Java中,僅使用final關鍵字可以定義一個常數嗎? 在Java中,僅使用final關鍵字可以定義一個常數嗎? Sep 20, 2023 pm 04:17 PM

常量變數是其值固定且程式中只存在一個副本的變數。一旦你聲明了一個常數變數並給它賦值,你就不能在整個程式中再次改變它的值。與其他語言不同,Java不直接支援常數。但是,你仍然可以透過宣告一個變數為靜態和final來創建一個常數。靜態-一旦你聲明了一個靜態變量,它們將在編譯時加載到內存中,即只有一個副本可用。 Final-一旦你宣告了一個final變量,就不能再修改它的值。因此,你可以透過將實例變數宣告為靜態和final來在Java中創建一個常數。範例 示範classData{&am

深入解析C語言中static關鍵字的作用與用法 深入解析C語言中static關鍵字的作用與用法 Feb 20, 2024 pm 04:30 PM

深入解析C語言中static關鍵字的功能和用法在C語言中,static是一種非常重要的關鍵字,它可以被用於函數、變數和資料類型的定義。使用static關鍵字可以改變物件的連結屬性、作用域和生命週期,以下就來詳細解析一下static關鍵字在C語言中的作用和用法。 static變數與函數:在函數內部使用static關鍵字定義的變數稱為靜態變量,它具有全域生命週

java final關鍵字的作用是什麼 java final關鍵字的作用是什麼 Nov 25, 2022 pm 04:26 PM

在java中,final可以用來修飾類別、方法和變數。 final修飾類,表示該類是無法被任何其他類繼承的,意味著此類在一個繼承樹中是一個葉子類,並且此類的設計已被認為很完美而不需要進行修改或擴展。 final修飾類別中的方法,表示該類別是無法被任何其他類別繼承的,不可以被重寫;也就是把該方法鎖定了,以防止繼承類別對其進行更改。 final修飾類別中的變量,表示該變數一旦被初始化就不可改變。

golang框架面試題集錦 golang框架面試題集錦 Jun 02, 2024 pm 09:37 PM

Go框架是一組擴充Go內建程式庫的元件,提供預製功能(例如網路開發和資料庫操作)。受歡迎的Go框架包括Gin(Web開發)、GORM(資料庫操作)和RESTful(API管理)。中間件是HTTP請求處理鏈中的攔截器模式,用於在不修改處理程序的情況下新增身份驗證或請求日誌記錄等功能。 Session管理透過儲存使用者資料來保持會話狀態,可以使用gorilla/sessions管理session。

Java JPA 面試題精選:檢視你的持久化框架掌握程度 Java JPA 面試題精選:檢視你的持久化框架掌握程度 Feb 19, 2024 pm 09:12 PM

什麼是JPA?它與JDBC有什麼不同? JPA(JavaPersistenceapi)是一個用於物件關係映射(ORM)的標準接口,它允許Java開發者使用熟悉的Java物件來操作資料庫,而無需編寫直接針對資料庫的sql查詢。而JDBC(JavaDatabaseConnectivity)是Java用來連接資料庫的標準API,它需要開發者使用SQL語句來操作資料庫。 JPA將JDBC封裝起來,為物件-關聯映射提供了更方便、更高層級的API,簡化了資料存取操作。在JPA中,什麼是實體(Entity)?實體

See all articles