Java面向對象設計最佳實踐 - 類的設計基礎知識

在開始類的設計之旅之前,首先引入一些基礎知識,方便後續更詳細的實踐設計文章之理解,也是本章的主要內容。

Java作爲“全面”支持面向對象編程(OOP)語言,其吸取了其他OOP(比如C++、Smalltalk語言等特性)的優點,提供了面向對象的四種基本性質: 抽象性 封裝性 繼承性 多態性

Java語言以"類(Class)"爲基本單位(或者模塊),按照成員劃分,其主要組成部分爲:字段(Field)、方法(Method),構造器(Constructor),其中,在Java 5發佈之後,註解(Annotation)也加入了Class的大家庭之中。按照結構來劃分,主要分爲申明語句(Declaration Statement)和塊(Block)。其中,申明語句,字段的申明和接口中方法和常量定義(這裏和C語言說法有點不同)。塊(Block)是執行大於零條的執行語句,塊中的變量是本地變量(Local Variable)。分爲命名塊和非命名塊。命名塊是有名稱的塊,大致分爲方法(Method)和構造器(Constructor)和內置類(Inner/Nested Class)。(類是也是一種塊,不過層次不同。而內置類(Inner/Nested Class),筆者把其歸爲字段之中)。非命名塊,顧名思義,大致有類(Static Block)塊、實例(Instance Block)和匿名內部類(Anonymous Class)。這些信息保存在JVM中的方法區中。注意,泛型類型參數在運行時進行了擦寫,因此是不可見的。

字段(Field),主要表示類或者對象(實例)的狀態(引用或者原生類型),也可以稱爲“屬性”。對於類的字段而言,類中的字段,其生命範圍是類範圍,這種類狀態的持久到JVM退出或者ClassLoader重載其類定義。相反,對象字段,其關聯的生命範圍是對象(實例),每個對象字段的狀態相對獨立的,當對象(實例)消亡後,其狀態不復存在。最後一種特殊狀態字段是“常量”(static final修飾),其生命週期是在JVM的常量池。

方法(Method),命名的控制類或者對象的有狀態或無狀態的執行模塊,可稱作類或者對象的“行爲”。按照生命範圍來來劃分,有類方法和對象(實例)方法。其中對象(實例)方法又可劃分爲抽象和具體(普通)方法。方法是實現多態的重要手段,注意方法本身沒有狀態。

構造器(Constructor),主要用於初始化對象(實例)狀態字段,值得一提的是,在構造器中初始化類狀態字段是一種相當壞的實踐。

內置類,由三類組成,有作爲實例部分的內置類(Inner Class)、隸屬於類的內置類(Nested Class)和在塊中定義的內置類(Local Class)。

類塊(Static Block),也可稱爲靜態塊。僅僅可視本類的靜態成員,其主要用作初始化類成員變量或常量,當ClassLoader加載該類的時候,其生命週期僅僅一次加載執行,先定義先執行的原則。

實例塊(Instance Block),也叫做對象塊。和類塊類似,可視所有的本類和對象成員,其生命週期開始在構造器調用之前,先定義先執行的原則。

註解(Annotation),作爲語言新功能添加到了Java 5 以後的版本。主要作爲程序元信息配置和代碼註解,提供了可讀性和新的元信息配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章