final的使用

修飾符 final 其本意為期犬,adj.最終的;決定性的;不可更改的〔郑可以用于修飾類哭懈、方法灾馒、變量茎用。


final-used.png

修飾變量來表示常量

When a variable is declared with final keyword, its value can’t be modified, essentially, a constant. This also means that you must initialize a final variable.It is good practice to represent final variables in all uppercase, using underscore to separate words.

// 必須在定義的時候完成初始化
public static final HttpMethod METHOD_GET = new HttpMethod("GET");
public static final HttpMethod METHOD_POST = new HttpMethod("POST");

// 在構(gòu)造方法中@RequiredArgsConstructor完成初始化
// If you have more than one constructor in your class ,
// then it must be initialized in all of them, otherwise compile time error will be thrown.
@Getter
@RequiredArgsConstructor
public enum SwitchEnum {
    
    OPEN("open", "開關(guān)打開"),
    CLOSE("close", "開關(guān)關(guān)閉");
    
    private final String code;
    private final String desc;
}

// 靜態(tài)代碼塊其實(shí)就是給類初始化的,而構(gòu)造代碼塊是給對象初始化的睬罗。
// 在構(gòu)造代碼塊(優(yōu)先級高于構(gòu)造方法)中完成初始化
class A{
    final int a;
    {
        a = 520;
    }
}

// 靜態(tài)代碼塊其實(shí)就是給類初始化的轨功,而構(gòu)造代碼塊是給對象初始化的。
// 在靜態(tài)代碼塊中完成初始化
class B{
    static final String love;
    static {
        love = "you";
    }    
}

靜態(tài)塊\main()\構(gòu)造塊\構(gòu)造方法的執(zhí)行順序

If the final variable is a reference, this means that the variable cannot be re-bound to reference another object, but internal state of the object pointed by that reference variable can be changed i.e. you can add or remove elements from final array or final collection. It is good practice to represent final variables in all uppercase, using underscore to separate words.
A final variable cannot be re-assign. But in case of a reference final variable, internal state of the object pointed by that reference variable can be changed. Note that this is not re-assigning. This property of final is called non-transitivity.

class Gfg 
{ 
    public static void main(String[] args)  
    { 
        // a final reference variable sb 
        final StringBuilder sb = new StringBuilder("Geeks"); 
          
        System.out.println(sb); 
          
        // changing internal state of object 
        // reference by final reference variable sb 
        sb.append("ForGeeks"); 
          
        System.out.println(sb); 
    }     
} 

修飾類表示不能繼承

When a class is declared with final keyword, it is called a final class. A final class cannot be extended(inherited).

// 不讓繼承的目的是不可擴(kuò)展
public final class Integer extends Number implements Comparable<Integer>{
    ...
} 

// 不讓繼承的目的是不允許修改
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    ...
}

修飾方法表示不能重寫

When a method is declared with final keyword, it is called a final method. A final method cannot be @overridden. The Object class does this—a number of its methods are final.We must declare methods with final keyword for which we required to follow the same implementation throughout all the derived classes.

public class Object {
    public final native void notify();
    public final native void notifyAll();
    public final native void wait(long timeout) throws InterruptedException;
}

修飾方法中的參數(shù)容达,表示方法傳過來的參數(shù)古涧,在方法內(nèi)不能做修改,也就是說方法里的這個參數(shù)一直指向的是你傳進(jìn)來的參數(shù)花盐。當(dāng)參數(shù)傳進(jìn)來的時候羡滑,表示初始化完成菇爪,可以防止在里面重新賦值引起程序錯誤∑饣瑁或者一些加解密場景中凳宙,只允許你使用這個值(密鑰),但不允許你改變這個值职祷。

// 構(gòu)建sftp連接氏涩,數(shù)據(jù)不允許在方法內(nèi)被修改
public static ChannelSftp getSftp(final String host,
                                         final int port,
                                         final String username,
                                         final String password,
                                         final String requestId,
                                         final String thirdAppCode) throws Exception {
        String key = getKey(host, port, username, password);
        
        Callable<Channel> callable = () -> {
            Session sshSession = getSession(host, port, username, password, thirdAppCode);
            Channel channelExist = sshSession.openChannel("sftp");
            channelExist.connect(CHANNEL_TIMEOUT);
            return channelExist;
        };
        
        FutureTask<Channel> futureTask = new FutureTask<>(callable);
        FutureTask<Channel> channelFutureTask = SFTP_CHANNEL_POOL.putIfAbsent(key, futureTask);
        channelFutureTask = futureTask;
        channelFutureTask.run();
        Channel channel = channelFutureTask.get();
        return (ChannelSftp) channel;
    }

特別說明final使用在for循環(huán)中

下面代碼run fine,實(shí)際上在每次迭代中有梆,i都會重新被申明是尖。

public void test() {
        int arr[] = {1, 2, 3};
        
        // final with for-each statement 
        // legal statement 
        for (final int i : arr) {
            System.out.print(i + " ");
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泥耀,隨后出現(xiàn)的幾起案子饺汹,更是在濱河造成了極大的恐慌,老刑警劉巖痰催,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件首繁,死亡現(xiàn)場離奇詭異,居然都是意外死亡陨囊,警方通過查閱死者的電腦和手機(jī)弦疮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜘醋,“玉大人胁塞,你說我怎么就攤上這事⊙褂铮” “怎么了啸罢?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胎食。 經(jīng)常有香客問我扰才,道長,這世上最難降的妖魔是什么厕怜? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任衩匣,我火速辦了婚禮,結(jié)果婚禮上粥航,老公的妹妹穿的比我還像新娘琅捏。我一直安慰自己,他們只是感情好递雀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布柄延。 她就那樣靜靜地躺著,像睡著了一般缀程。 火紅的嫁衣襯著肌膚如雪搜吧。 梳的紋絲不亂的頭發(fā)上市俊,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音滤奈,去河邊找鬼秕衙。 笑死,一個胖子當(dāng)著我的面吹牛僵刮,可吹牛的內(nèi)容都是我干的据忘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搞糕,長吁一口氣:“原來是場噩夢啊……” “哼勇吊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窍仰,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汉规,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驹吮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针史,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年碟狞,在試婚紗的時候發(fā)現(xiàn)自己被綠了啄枕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡族沃,死狀恐怖频祝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脆淹,我是刑警寧澤常空,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盖溺,受9級特大地震影響漓糙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烘嘱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一昆禽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拙友,春花似錦为狸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽病曾。三九已至牍蜂,卻和暖如春漾根,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲫竞。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工辐怕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人从绘。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓寄疏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親僵井。 傳聞我的和親對象是個殘疾皇子陕截,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354