final、static(Java)和const、static(C#)

來源:互聯網
上載者:User

現在看看以下等價關係:

C#中的static 和Java中的static

簡單,兩者用法完全是一致的。從兩方面討論:

1. 變數是屬於類的,不是執行個體層級的。只能通過類名調用,不能通過執行個體調用。

2. 如果在定義時就賦值了,那麼在類初始化的時候,最先完成所有靜態變數的賦值。但是要注意,所有靜態變數的初始化順序是無法確定的。

C# 中的const 和Java中的finnal

很長一段時間我一直認為兩者是相同的作用,無非是變數初始化後不能更改,即只能在定義時或者建構函式中賦值。然而這僅僅只是片面的,下面將為大家詳細分析:

1.修飾變數

準確的說C#中的const 等價於 Java中的static final,也就是說,Java中final不具有static的功能。而C#中的const具有static的功能。因此在C#中 public static const string 等將於 public const string。

2.修飾類和方法

此時Java中的final類似C#中的sealed,就是說,final修飾的類不能被繼承,final修飾的方法不能被覆蓋。

而C#中的const不能修飾類和方法。

問題:

1. 私人靜態成員的作用(private static 變數)

字面表示私人的,類外不能使用;靜態,全域變數。看上去很矛盾,又不能被類外使用,要全域的有什麼用。問得好,類中全域也是很有意義的,例如 private static int a = 5,那麼就可以保證變數a在類的初始化過程中將被優先初始化(在建構函式執行之前)。這樣如果對象A的初始化需要對象B的執行個體,那麼就可以用這種申明,以保證在類A在建構函式中能夠使用類B的執行個體。同時private又能夠保證類B的執行個體只能在類A中使用,起到很好的密封作用。

2. 私人最終成員作用(private final 變數)

在類建構函式完成前必須對該成員完成初始化,一旦定義不許更改;該成員只能在本類中使用。執行個體,子類中都不能使用。

private static final修飾的成員在申明的時就被賦值,保證在建構函式中可以被使用,一個被private static final修飾的成員通常表示其他組件的一個執行個體,且變數是類中的全域變數。

private final 修飾的成員在構造中被賦值,表示它是該類全域的私人成員變數,且該類的構造需要傳入他們的初始值,才能完成類的初始化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.