亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java入門 java物件導向之final修飾符

java物件導向之final修飾符

Nov 26, 2019 pm 02:43 PM
final java 修飾符 物件導向

java物件導向之final修飾符

一、final修飾詞定義:

final關鍵字可用來修飾類別、變數與方法

final修飾變數時,表示該變數一旦獲得了初始值就不可被改變(嚴格來說:final修飾得變數不可被改變,一旦獲得初始值,該final變數就不能被重新賦值)

final既可以修飾成員變數(類別變數和實例變數),也可以修飾局部變數和形參

相關視訊學習教學:java線上學習

二、final成員變數語法規(guī)定:

final修飾的成員變數必須由程式設計師明確地指定初始值,系統(tǒng)不會對final成員進行隱式處初始化。

1、final修飾的類別變數、實例變數能製定初始值的地方如下:

類別變數:必須在靜態(tài)初始化區(qū)塊中指定初始值或宣告該類別變數時指定初始值,而且只能在兩個地方的其中之一指定

實例變數:必須在非靜態(tài)初始化區(qū)塊、宣告該實例變數或建構器中指定初始值,而且只能在三個地方的其中一個指定

注意:如果普通初始化區(qū)塊已經為某個實例變數指定了初始值,則不能再在建構器中為該實例變數制定初始值

下面程式示範了final修飾成員變數的效果:

package lextends;
public class FinalVariableTest {
    //定義成員變量時指定默認值,合法
    final int a = 6;
    //下面變量將在構造器或初始化塊中分配初始值
    final String str;
    final int c;
    final static double d;

    //既沒有指定默認值,又沒有在初始化塊、構造器中指定初始值
    //下面定義的ch實例是不合法的
    //final char ch;
    //初始化塊,可對沒有指定默認值的實例變量指定初始值
    {
        //在初始化塊中為實例變量指定初始值,合法
        str = "Hello";
        //定義a實例變量時已經指定了默認值
        //不能為a重新賦值,因此下面賦值語句非法
        //a=9;
    }

    //靜態(tài)初始化塊,可對沒有指定默認值的類變量指定初始值
    static {
        //在靜態(tài)初始化塊中為類變量指定初始值,合法
        d = 5.6;
    }

    //構造器,可以對既沒有指定默認值,又沒有在初始化塊中,指定初始值的實例變量指定初始值
    public FinalVariableTest() {
        //如果在初始化塊中已經對str指定了初始值
        //那么在構造器中不能對final變量重新賦值,下面賦值語句非法
        //str="java"
        c = 5;
    }

    public void changeFinal() {
        //普通方法不能為final修飾的成員變量賦值
        //d=1.2
        //不能在普通方法中為final成員變量指定初始值
        //ch = 'a';
    }
public static void mian(String[] args){
    FinalVariableTest ft= new FinalVariableTest();
    System.out.println(ft.a);
    System.out.println(ft.c);
    System.out.println(ft.d);}
}

2、如果打算在建構器、初始化區(qū)塊對final成員變數進行初始化,則不要在初始化之前就存取成員變數的值。

package lextends;
public class FinalErrorTest {
    //定義一個final修飾的實例變量
    //系統(tǒng)不會對final成員變量進行默認初始化
    final int age;
    {
        //age沒有初始化,所以此處代碼將引起錯誤,因為它試圖訪問一個未初始化的變量
        //只要把定義age時的final修飾符去掉,程序就正確了
        System.out.println(age);
        
        age=6;
        System.out.println(age);
    }
    public static void main(String[] args){
        new FinalErrorTest();
    }
}

三、final局部變數

1、定義:系統(tǒng)不會對局部變數進行初始化,局部變數必須由程式設計師顯示初始化。因此使用final修飾局部變數時,既可以在定義時指定預設值,也可以不指定預設值。

下面程式示範了final修飾局部變數、形參:

(final修飾形參的情形,因為在呼叫此方法時,由系統(tǒng)根據傳入的參數來完成初始化,因此使用final修飾符不能被賦值。)

package lextends;
public class FinalLocalVariable {
    public void test(final int a){
        //不能對final修飾的形參賦值,下面語句非法
        //a=5;
    }
    public static void mian(String[] args){
        //定義final局部變量時指定默認值,則str變量無法重新賦值
        final String str="hello";
        //下面賦值語句非法
        //str="Java";
        
        //定義final局部變量時沒有指定默認值,則d變量可被賦值一次
        final double d;
        d=5.6;
        //對final變量重新賦值,下面語句非法
        //d=6.4;
    }
}

#四、final修飾基本型別變數和引用型別變數的差異

##使用final修飾的參考型別變數不能被重新賦值,但可以改變引用類型變數所引用對象的內容

例如下面的iArr變數所引用的陣列對象,final修飾後的iArr變數不能被重新賦值,但iArr所引用數組的數組元素可以被改變

eg.
//final修飾數組元素,iArr是一個引用變量
final int[] iArr={5,6,12,9};
System.out.println(Arrays.toString(iArr));
//對數組元素進行排序,合法
Arrays.sort(iArr);
System.out.println(Arrays.toString(iArr));
//對數組進行元素賦值,合法
iArr[2]=-8;
System.out.println(Arrays.toString(iArr));
//下面語句對iArr重新賦值,非法
//iArr=null;

五、可執(zhí)行」巨集取代「的final變數

1、對於一個final變數來說,不管它是類別變數、實例變量,還是局部變量,只要該變量滿足三個條件,這個final變量就不再是一個變量,而是相當於一個直接量。

(1)使用final修飾符修飾

(2)在定義該final變數時指定了初始值

(3)該初始值可以在編譯時就被確定下來

2、final修飾符有一個重要用途就是定義」巨集變數「。當定義final變數時就為該變數指定了初始值,而且該變數可以在變數時就確定下來,那麼這個final變數本質上就是一個”宏變數“,編譯器會把程式中所有用到該變數的地方直接替換成該變數的值。

3、

eg.
String s1="瘋狂Java";
//s2變量引用的字符串可以在編譯時就確定下來
//因此s2直接引用變量池中已有的"瘋狂Java"字符串
String s2="瘋狂"+"Java";
System.out.println(s1==s2);//true

//定義兩個字符串直接量
String str1="瘋狂";
String str2="Java";
String s3=str1+str2;
System.out.println(s1==s3);//false
對於s3而言,它的值由str1和str2進行連接運算得到的,由於str1、str2只是兩個普通變量,編譯器不會執(zhí)行」宏替換“,因此編譯器無法確定s3的值,也就無法讓s3指向字串池中快取的"瘋狂Java"。

更多java相關文章教學可以存取:

java入門教學

以上是java物件導向之final修飾符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設置。 JSON位置 VSCODE設置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執(zhí)行多個操作,最後根據結果提交或回滾;1.調用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調用conn.commit(),若發(fā)生異常則調用conn.rollback()確保數據一致性;同時應使用try-with-resources管理資源,妥善處理異常並關閉連接,避免連接洩漏;此外建議使用連接池、設置保存點實現部分回滾,並保持事務盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(JVM)內部 了解Java虛擬機(JVM)內部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網絡端口和防火牆 了解網絡端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

See all articles