2016-09-29 116 views
0

我從PHP移動到Java因爲英文不是我的主要語言,所以很難理解OOP。我想要一個簡單的答案(儘可能簡單,哈哈)。最新的區別:在第二空的構造函數和沒有構造函數有什麼區別

class Munikas { 

    public Munikas(){ 
    } 

    public void rytas(){ 
     System.out.println("Labas Rytas"); 
    } 

    public static void main(String[] args){ 
     Munikas labas = new Munikas(); 
     labas.rytas(); 
    } 
} 

而且

class Munikas { 
    public void rytas(){ 
     System.out.println("Labas rytas"); 
    } 

    public static void main(String[] args){ 
     Munikas labas = new Munikas(); 
     labas.rytas(); 
    } 
} 

我不使用constructor。將來如何影響我的代碼?

回答

9

您提供的代碼片段之間沒有區別。用戶提供的無參數構造函數基本上與缺省情況下由Java提供的默認無參數構造函數相同。

如果你在那個沒有參數的構造函數中做了什麼,然後會有區別,但是作爲創作,這兩個代碼示例是等價的。

Java Language Specification爲此提供了更多的上下文,其代碼示例與您自己的代碼示例類似。

+0

所以我需要自己構建構造函數只有當我需要使用它的參數? –

+0

@TomasVilemaitis:通常這就是構造函數的用例,儘管如果你真的想使用構造函數來建立一些默認狀態。 – Makoto

+0

@TomasVilemaitis沒有。只有當你在構造函數中做某些事情。可以有一個沒有參數的構造函數來設置一些字段。 –

5

沒有區別。當你的類沒有定義任何構造函數時(如你的第二個代碼片段),編譯器會自動插入一個空參數的構造函數,所以第二個片段等同於第一個片段。

1

您不必使用空的構造函數。編譯器會自動生成它。

-1

簡單地說,在構造函數允許你創建類的實例對象,使用這樣的事情:

Munikas testObject = new Munikas(); 

當您嘗試使用非靜態方法時,兩者之間的區別將很明顯。該方法來自Rytas()是非靜態的,這意味着你需要調用它使用類的一個實例化的對象,像這樣:

testObject.rytas(); 

所以使用來自Rytas時,你將需要使用一個構造函數。正如其他人所提到的,你不需要添加代碼來創建空的構造函數,但是有時候你需要爲具有參數的對象使用構造函數。主要的STATIC方法無論有沒有構造函數都可以,只能使用類(Munikas)本身調用。有關更多信息,請檢查this。希望有所幫助。

0

的Java構造是當一個對象被使用new關鍵字實例化被稱爲特殊的方法爲:

ClassName referenceName = new ClassName();

默認構造:

public ClassName(){ // no statements }

類中的構造函數不是必須是。如果沒有在類中定義構造函數,然後JVM添加默認之一。

在第一碼:

您已經定義了沒有任何語句,以便它什麼都不做的默認構造函數。這就像不定義構造函數。

在第二碼:

JVM自動定義默認構造函數一樣在你的第一個代碼。所以,不會有任何不添加構造函數的影響。

相關問題