1. 程式人生 > >關於static class的意義和一些解釋

關於static class的意義和一些解釋

在java中: 1。final 篇 final 做為一個獨立的存在,也表現的與眾不同。一般情況都可以理解為 can't be changed. 1)final data: 實現constant語義。說明這個值:在編譯時不會變;在執行時也不能被改變。 在java中,提供了blank final:允許大家將初始化的動作延遲到constructor中。這是極限,有編譯器保證。 2)final parameter: 同上語義。 3)final method: a)防止子類overriden.(注:這個角度,private 隱含了final語義) b)efficiency: 允許編譯器轉換呼叫為inline call. 4)final class
: 拒絕inherited. 2。static 篇 1。定義:static is modifier.本想找一個權威的定義給大家,才發現此物沒有特定範圍。也就意味著可能明天還有新的用法,也說明了語言的無限擴充套件性。不得以,我們只好在此註明:以下用法為java 1.5 之前的說明: 閒言碎語:這 static 可不得了,跟誰沾上整個就變質了。如果你想標榜獨立個性,請用。static 一上,就表明 “我是人民的公僕,你只要找得著我,就可以讓我為您服務“。它屬於定義層次,在jvm層次獨一無二。從另一個角度上,它只能用於成員定義。我們不能定義一個 top-level classstatic
. public static class Outest { // compile error ...; } 裝載: 因為static成員(include field, method, nested class)是在儲存在類定義層次的,只要任何與其類相關的操作,均會產生它的初始化動作。(也就意味著,它已經準備就緒,你只要想用就用。classname.staticMember) 所有的static object/primitive and static block,按照先來後到的順序執行初始化操作。 與其他一樣。 abstract 和 sealed一起用?定義abstract的目的就是抽象基類,seal表示不能繼承的實體類,完全是兩回事,怎麼可能一起用呢? abstract表明必須要被繼承,sealed表明不可以被繼承,這兩個是矛盾的,怎麼可以一起用呢。
通過檢視 IL 程式碼,我們會發現 static class 實際上就是 abstract sealed class,只不過編譯器在編譯時順便對 static class 的成員修飾符進行檢查而已。 讓我們再來猜測一下 MS 開發人員的想法:他們的目的是想獲得 abstract sealed class 的效果,但卻為語義上的矛盾而苦惱不已,大家想獲得一個優美的解決方式,於是就為 C# 2.0 新增了一個 static 關鍵字,完美的解決了這個問題。 也許有人會問:為什麼不是 static class = abstract class + static member limit 而要加上 sealed 的限制呢?理由是繼承一個只有 static 成員的類和重新寫一個類完全沒有區別。為什麼這麼說呢?因為 static 必然是not virtual,繼承它又能有什麼用呢? static class 還有一個限制,那就是隻能從 System.Object 繼承,為什麼會有這個限制,理由和上面差不多。 每每提到 static 關鍵字,我就想起了 static constructor,感謝 MS 的開發人員提供了這麼好的一個特性。但是 C# 提供了 static constructor 卻沒有提供 static destructor,