java類的組成結構詳解
成員變量
成員變量便是在類中定義的變量。
例如這樣:
public class POP { int a = 1; }
而成員變量又分為兩種,一種是被static所修飾的類變量,他歸類所有,一種是沒有被static修飾的實例變量,他歸對象所有。
如下:
public class POP { int a = 1; static int b = 1; }
正如字面上的意思,歸類所有的變量b,他能在類的外部,直接通過POP.b的形式進行操作。
如下程序:
public static void main(String[] args) { POP.b++; System.out.println(POP.b); }
但是,在實際使用中,我們也可以通過對象.b的形式來調用他。
如下:
public static void main(String[] args) { POP.b++; System.out.println(POP.b); System.out.println(new POP().b); }
這是java很不好的一個缺陷,因為這個變量b,實際上是屬於類的,雖然能用對象來調用,但不建議。
再理解一下這個變量b隻有一份,如下程序:
public static void main(String[] args) { POP.b++; System.out.println(POP.b); System.out.println(new POP().b++); System.out.println(new POP().b++); }
你會發現,盡管我使用不同的對象去對b進行操作,但是他們的操作卻共同作用在瞭同一個b上,這也是我為什麼不建議使用對象來調用類變量。
成員變量可以被四種權限修飾符修飾,以適應各種適用情形。
成員變量可以被final修飾,作為常量。
成員變量也可以被我上面提到的static修飾。
附上總代碼:
public class POP { public static void main(String[] args) { POP.b++; System.out.println(POP.b); System.out.println(new POP().b++); System.out.println(new POP().b++); } int a = 1; static int b = 1; }
方法
方法按照被static修飾分為實例方法以及類方法。
public void get(){ } public static void did(){ }
需要註意的是,實例方法可以調用類變量,而類方法不可以調用實例變量,為什麼呢?
我們可以思考一下,類方法是為類所有的,實例方法是由對象所有的。
類存在的時候,對象不一定被創建瞭,如果這時候通過類方法來調用實例變量,此實例變量不存在,因此,這是不可取的。
方法可以被四種權限修飾符修飾。
方法可以被static修飾。
方法可以被final修飾,表示不能被子類重寫。
方法可以被abstract修飾,表示這為一個抽象方法,而隻要有一個抽象方法,那該類就是一個抽象類。
關於抽象類的內容以後再談。
構造器
構造器,用於創建對象。
可以被四種權限修飾符修飾。
protected POP(){ } POP(int a){ }
我們可以通過this.POP(形參列表)的形式,來在構造器裡面調用其他構造器,註意,這種方式,必須寫在方法體的最上部分,並且,如果沒有寫this,那麼java會默認用super來調用父類的空參構造器,這也是為什麼我們建議設計程序的時候
總是留一個空參構造器。
那麼,我們為什麼要在一個構造器裡面通過this調用另一個構造器呢?
因為這樣能減少代碼的重復,方便我們迭代升級。
另外註意,構造器是沒有返回值的,當然你也可以說他的返回值就是他所創建的對象,不過我們不能顯示的指明。
代碼塊
代碼塊分為實例代碼塊和類代碼塊。
{ System.out.println("實例代碼塊"); } static{ System.out.println("類代碼塊"); }
類代碼塊屬於類,在類的加載的時候就會執行,而實例代碼塊在對象的創建的時候會執行。
到此這篇關於java類的組成結構詳解的文章就介紹到這瞭,更多相關java類組成結構內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 一篇文章帶你深入瞭解Java對象與Java類
- Java關鍵字詳解之final static this super的用法
- Java深入數據結構理解掌握抽象類與接口
- Java語言之包和繼承詳解
- 詳解Java面向對象編程之多態