這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)final關(guān)鍵字如何正確的在Java項(xiàng)目中使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站專注于岫巖企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開發(fā)。岫巖網(wǎng)站建設(shè)公司,為岫巖等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)前言
在java中可以將實(shí)例域定義為final。在構(gòu)建對象是必須初始化這樣的值。必須確保在每個構(gòu)造器執(zhí)行之后,這個域的值被設(shè)置,并且在后面的操作中不再對其修改。使用final聲明變量之后,這個值就不能修改,一般final類型的變量都被聲明為靜態(tài)變量,而且是公有類型的,它在內(nèi)存中被放在一個特有的公共區(qū)域。
也就是說,在Java語法中規(guī)定,final修飾的成員變量必須有程序員顯式地指定初始值。
定義格式為: public static final double pi = 3.1415926;
final修飾符大多應(yīng)用于基本類型域,或不可變類的域(如果類中的每個方法都不會改變其對象,這種類成為不可變類。比如說Java中的String類就是一個不可變類。)
如果定義了兩個相同的變量,都是final類型的,這兩個相同的變量名有著不同的值,其實(shí)在內(nèi)存中是開辟了兩個內(nèi)存空間,之前定義的變量的值會被后來定義的變量的值覆蓋掉。原理是變量名指向后來定義的變量值的內(nèi)存空間,之前定義的變量值會被Java虛擬機(jī)根據(jù)某種特定的算法在特定的時(shí)間處理掉。
在下面的代碼中詳細(xì)的介紹了final類型的變量如何進(jìn)行定義和初始化:
public class FinalVariableText { //定義成員變量是指定默認(rèn)值,合法 final int a = 6; //下面變量將在構(gòu)造器或初始化塊中分配初始值 final String str; final int c ; final static double d; //既沒有指定默認(rèn)值,也沒有在初始化塊、構(gòu)造器中指定初始值 //下面定義的ch實(shí)例變量是不合法的 //final char ch; { //在初始化塊中只懂初始值,合法 str ="hello" ; //定義a實(shí)例變量已經(jīng)有初始值了,不能為a重新賦值。下面的語句是不正確的 //a = 9; } //靜態(tài)初始化塊 static { // d是靜態(tài)成員變量,必須在靜態(tài)初始化塊中為其指定初始值 d = 5.6; } //構(gòu)造器,可對 沒有設(shè)置初始值的成員變量設(shè)置初始值 //構(gòu)造器必須與類名相同,這一點(diǎn)注意! public FinalVariableText(){ //如果在初始化塊中對str賦初值,在構(gòu)造器中在為str重新賦值,是不合法的,程序會拋出錯誤。 c = 5; } public void changeFinal() { //普通方法不能為final修飾的成員變量賦值 //d = 1.3; //也不能在普通方法中為沒有設(shè)置初始值的final類型的變量賦初值 //ch = 'ch'; } public static void main(String[] args) { FinalVariableText ff = new FinalVariableText(); System.out.println(ff.a); System.out.println(ff.c); System.out.println(ff.str); System.out.println(ff.d); }