Java中構造方法、實例方法、類方法的區別


 

 

 

1. 構造方法

       構造方法負責對象的初始化工作,為實例變量賦予合適的初始值。必須滿足以下的語法規則:

 

  • 方法名與類名相同;
  • 不要返回類型(例如return、void等);
  • 不能被static、final、native、abstract和synchronized修飾,不能被子類繼承。

        例如以下例子:

 1.1. 默認構造方法

                默認構造方法時沒有參數的構造方法,分為

                    a.隱含的默認構造方法:public ClassName(){}

                    b.程序顯示定義默認構造方法:public Employee(){this("無名氏");}

                可以調用ClassName類的默認構造方法來創建對象,沒有默認構造方法則不合法,例如:

 

1.2. 重載構造方法

                通過new創建一個對象后,在不同的條件下,對象可能會有不同的初始化行為,可以通過重載構造方法來表達對象的初始化行為。具體參考this關鍵字的用法。

 

        1.3. 子類調用父類的構造方法

                父類的構造方法不能被子類調用,可以通過super語句調用父類的構造方法。例如:

 用super調用父類的構造方法必須遵守以下規則:

                        1. 子類的構造方法中不能直接通過父類的方法名調用父類的構造方法,使用super語句;

                        2. 加入在子類的構造方法中有super語句,它必須作為構造方法的第一條語句(同this語句);

        1.4. 構造方法的作用域

 

  • 當前類的其他構造方法通過this語句調用;
  • 當前類的子類的構造方法通過super語句調用;
  • 在程序中通過new語句調用。

        1.5. 構造方法的private訪問級別

 

                構造方法為private級別時,意味着只能在當前類中訪問它:當前類的其他構造方法中可以通過this語句調用,此外還可以在當前類的成員方法中使用new調用。

                以下場合中,可以把類的所有構造方法聲明為private:

 

  • 這個類中僅僅包含一些供其他程序調用的靜態方法,沒有任何實例方法。
  • 禁止這個類被繼承。聲明為private后,如果定義了它的子類,子類的方法中無法調用父類的任何構造方法。
  • 類需要把構造自身實例的細節封裝起來,不允許其他程序通過new語句創建這個類的實例。提供靜態方法。

 

Java中類的方法分為類方法(用static修飾,也叫靜態方法)和實例方法(沒有用static修飾,也叫非靜態方法),這兩種方法之間有什么區別呢?

一. 實例方法

當類的字節碼文件加載到內存中時,類的實例方法並沒有被分配入口地址,只有當該類的對象創建以后,實例方法才分配了入口地址。從而實例方法可以被類創建的所有對象調用,還有一點需要注意,當我們創建第一個類的對象時,實例方法的入口地址會完成分配,當后續在創建對象時,不會再分配新的入口地址,也可以說,該類的所有對象共享實例方法的入口地址,當該類的所有對象被銷毀,入口地址才會消失。

二. 類方法

當類的字節碼文件加載到內存,類方法的入口地址就會分配完成,所以類方法不僅可以被該類的對象調用,也可以直接通過類名完成調用。類方法的入口地址只有程序退出時消失。

因為類方法的入口地址的分配要早於實例方法的入口地址分配時間,所有在定義類方法和實例方法是有以下規則需要遵循:

1. 在類方法中不能引用實例變量

實例變量的定義類似實例方法,沒有用static修飾的變量,實例變量的創建與實例方法的創建相同,也是在類的對象創建時完成,所以在類方法中是不能引用實例變量的,因為這個時候實例變量還沒有分配內存地址。

2. 在類方法中不能使用super和this關鍵字

這是因為super和this都指向的是父類和本類的對象,而在類方法中調用的時候,這些指代的對象有可能都還沒有創建。

3. 類方法中不能調用實例方法

原因同1。

與類方法相比,實例方法的定義就沒有什么限制了:

1. 實例方法可以引用類變量和實例變量

2. 實例方法可以使用super和this關鍵字

3. 實例方法中可以調用類方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM