国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java面試題 面試官:請(qǐng)?jiān)敿?xì)說明final關(guān)鍵字的作用,以及它與static的差異

面試官:請(qǐng)?jiān)敿?xì)說明final關(guān)鍵字的作用,以及它與static的差異

Mar 08, 2021 am 10:27 AM
final static 關(guān)鍵字 面試

面試官:請(qǐng)?jiān)敿?xì)說明final關(guān)鍵字的作用,以及它與static的差異

前言:

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

1、final關(guān)鍵字的意思

final表面意思是不可更改的,恆量的意思;類似C語言中的const關(guān)鍵字,指的是無法改變的量,這與靜態(tài)標(biāo)量static是有差別的,靜態(tài)變數(shù)指的是只有一份儲(chǔ)存空間,值是可以改變的。使用final一定原因是出於軟體設(shè)計(jì)的角度,因?yàn)閯e人看到final這個(gè)關(guān)鍵字就知道是什麼意思,達(dá)到心領(lǐng)神會(huì)的效果,但也正是由於這種"語義"的存在,在程式設(shè)計(jì)中要謹(jǐn)慎使用,以免誤用。

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

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

2、final的作用

final根據(jù)修飾位置的不同作用也不相同,針對(duì)三種情況:

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

注意:局部變數(shù)不在我們討論的範(fàn)疇,因?yàn)榫植孔償?shù)本身就有作用範(fàn)圍,不使用private、public等詞修飾。

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

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

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

2.1、final修飾變數(shù)


被final修飾的變數(shù)必須顯示的初始化,初始化可以以三種方式:1)定義時(shí)初始化,2)在建構(gòu)器中設(shè)置值,3)在非靜態(tài)區(qū)塊中為final實(shí)例變數(shù)設(shè)定值。

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

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

如果final修飾的變數(shù)是物件類型,那麼不可更改指的是該變數(shù)不可以再指向別的對(duì)象,但是當(dāng)物件的值時(shí)可以更改的,例如:

final Operate operate = new Operate() ;// operate有一個(gè)普通變量i初始化為10operate.i = 11;
operate.i = 12;
System.out.println(operate.i); //輸出12上述是自定義類,即便是數(shù)組,List等集合類型,所保存的值也是可以更改的。

3、final和static的區(qū)別

static作用於成員變數(shù)用來表示只保存一份副本,而final的作用是用來保證變數(shù)不可變,看一下網(wǎng)路上的一個(gè)例子:

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();
}
//運(yùn)行結(jié)果,兩次打印,j的值都是一樣的,j是static類型的屬于類,因此兩次值相同。i不是static的因此屬于對(duì)象,但是i的值是不可變的。

(學(xué)習(xí)影片分享:

java影片教學(xué)

4、其他final相關(guān)的知識(shí)


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

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)將類別、方法、變數(shù)宣告為final能夠提高效能,這樣JVM就有機(jī)會(huì)進(jìn)行估計(jì),然後最佳化。

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

相關(guān)推薦:

java面試題目及答案

原文連結(jié):

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

原文作者:隨風(fēng)浪子90

以上是面試官:請(qǐng)?jiān)敿?xì)說明final關(guān)鍵字的作用,以及它與static的差異的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
Java中final、finally、finalize的區(qū)別 Java中final、finally、finalize的區(qū)別 Feb 19, 2024 pm 12:16 PM

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

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

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

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

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

在Java中,僅使用final關(guān)鍵字可以定義一個(gè)常數(shù)嗎? 在Java中,僅使用final關(guān)鍵字可以定義一個(gè)常數(shù)嗎? Sep 20, 2023 pm 04:17 PM

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

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

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

一文理解JavaScript中的單例模式 一文理解JavaScript中的單例模式 Apr 25, 2023 pm 07:53 PM

JS 單例模式是常用的設(shè)計(jì)模式,它可以保證一個(gè)類別只有一個(gè)實(shí)例。這種模式主要用於管理全域變量,避免命名衝突和重複加載,同時(shí)也可以減少記憶體佔(zhàn)用,提高程式碼的可維護(hù)性和可擴(kuò)展性。

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

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

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

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

See all articles