真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

聊聊java中final那點(diǎn)事-創(chuàng)新互聯(lián)

1.final是什么

final是一個(gè)java關(guān)鍵字,一個(gè)修飾符,可用于修飾變量,方法,修飾類.

10年積累的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有渾源免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

2.final有什么用

  • final可以修飾變量時(shí),可以使其值不能改變
  • final修飾方法時(shí)使其不能被重寫
  • final修飾類時(shí),使其不能被繼承.

    3.final修飾成員變量

    fianl最常見的用法時(shí)用來(lái)修飾成員變量,成員變量分為靜態(tài)變量與普通變量.
    對(duì)于final修飾的變量,不是不能被賦值,是其值不能被改變,可以理解成只能賦一次值.可以在定義時(shí)賦值,也可以在定義后在另外賦值,但無(wú)論何種方式只能被賦值一次.

    (1)修飾靜態(tài)變量

    修飾靜態(tài)變量時(shí),可以選擇以下兩種方式賦值:

  • 在定義時(shí)賦值
  • 靜態(tài)初始化塊內(nèi)賦值
final static int a = 6;
final static int b;
static 
{
    b = 6;
}

(2)修飾普通成員變量

修飾普通成員變量時(shí),可以選擇以下三種方式賦值:

  • 定義時(shí)賦值
  • 初始化塊內(nèi)賦值
  • 構(gòu)造方法賦值
public class test
{
    int c = 1;
    int d;
    int e;
    {
        d = 2;
    }
    public test()
    {
        e = 3;
    }
}

根據(jù)"靜態(tài)"不能訪問(wèn)"非靜態(tài)"規(guī)則,就是說(shuō)靜態(tài)的方法不能訪問(wèn)非靜態(tài)成員,static初始化塊不能初始化非靜態(tài)成員,普通初始化塊也不能初始化靜態(tài)變量.
但是,有一個(gè)"bug"就是java允許通過(guò)方法訪問(wèn)final成員,因此...有趣的事情發(fā)生了.

public class test
{
    final int a;
    {
        System.out.println(a);//這里會(huì)報(bào)錯(cuò)
        printA();
        a = 3;
        printA();
    }
    void printA()
    {
        System.out.println(a);
    }
    public static void main(String[] args) {
        new test();
    }
}

以上這段代碼會(huì)報(bào)錯(cuò),因?yàn)閖ava不允許final成員未初始化前訪問(wèn).

聊聊java中final那點(diǎn)事
把上面那一行出錯(cuò)的代碼注釋后...居然通過(guò)了編譯?!

public class test
{
    final int a;
    {
        //System.out.println(a);//這里會(huì)報(bào)錯(cuò)
        printA();
        a = 3;
        printA();
    }
    void printA()
    {
        System.out.println(a);
    }
    public static void main(String[] args) {
        new test();
    }
}

printA()中只是用方法包裝了一下輸出函數(shù),居然就通過(guò)了編譯...有沒有興趣看一下結(jié)果?

聊聊java中final那點(diǎn)事
emmmmmm....final"默認(rèn)值"為0.....總之就不要想這些歪門邪道去在final初始化之前訪問(wèn)final變量了 ,在使用final變量前初始化,初始化,初始化,重要的事情說(shuō)三遍.

4.final修飾局部變量

final修飾局部變量其實(shí)也分兩種,一種是修飾形參,一種是修飾方法內(nèi)部的局部變量

(1)修飾形參

沒什么好說(shuō)的...就是形參的值不能改變.

public void f(final int a)
{
    a = 3;//報(bào)錯(cuò).
}

(2)修飾局部變量

修飾局部變量時(shí)可以定義時(shí)賦值,也可以在定義后在賦值(僅一次).

public void f()
{
    final int  a = 3;
    final int b;
    b = 2;
}

(3)final修飾引用變量

嗯.....這個(gè)是一個(gè)特別一點(diǎn)的例子,Talk is cheap.上代碼.

import java.util.Arrays;

public class test
{
    public static void main(String[] args) {
        final int[] arr = {1,2,3};
        arr[1] = 5;
        Arrays.stream(arr).forEach(System.out::print);
        System.out.println();
        final A a = new A();
        a.setA(9);
        System.out.println(a.getA());
    }
}

class A
{
    private int a = 3;
    public void setA(int a)
    {
        this.a = a;
    }
    public int getA()
    {
        return a;
    }
}

為什么final數(shù)組可以賦值???fianl對(duì)象的值被改變了???看看結(jié)果:
聊聊java中final那點(diǎn)事
final數(shù)組居然被改變了??final對(duì)象的值也被改變了??
其實(shí)呢,因?yàn)閿?shù)組是引用類型,final修飾引用類型時(shí),只能保證這個(gè)變量永遠(yuǎn)"指向"那一段內(nèi)存空間,保存的僅僅是一個(gè)引用,但是那段內(nèi)存空間的值是可以改變的.修飾對(duì)象時(shí)也是一樣的道理.

5.final修飾方法

final修飾的方法不能被重寫,當(dāng)然,不能"配合"private"使用",因?yàn)閜rivate把方法變成了私有,相當(dāng)于對(duì)子類不可見,子類都不知道父類"還有這玩意",就可以進(jìn)行所謂的"重寫"了.

class A
{
    private final void f(){}
}
class B extends A
{
    public final void f(){}//沒毛病
}

因?yàn)锽類的f()是屬于B類的,不是從A類繼承過(guò)來(lái)的.

6.final修飾類

final修飾類時(shí)表示該類不能被繼承.

final class A{}
class B extends A{}//出錯(cuò)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


名稱欄目:聊聊java中final那點(diǎn)事-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/dgsdsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部