2016-09-29 10 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がデフォルトで提供するデフォルトの引数なしのコンストラクタと同じです。

無引数のコンストラクタ内で何かを実行した場合は、となり、となりますが、作成されたとおり、これらの2つのコードサンプルは同等です。

Java Language Specificationは、これに関連したコードを提供しています。

+0

私はそれにargsを使用する必要があるときだけ私自身でコンストラクタを構築する必要がありますか? –

+0

@TomasVilemaitis:一般的にコンストラクタのユースケースですが、本当にしたい場合はコンストラクタを使用してデフォルト状態を確立することができます。 – Makoto

+0

@TomasVilemaitisいいえあなたがコンストラクタで何かをするときだけ。いくつかのフィールドを設定する引数のないコンストラクタが存在する可能性があります。 –

5

違いはありません。あなたのクラスが(2番目のスニペットのように)コンストラクタを定義していないとき、コンパイラは空のボディを持つパラメータのないコンストラクタを自動的に挿入するので、2番目のスニペットは最初のスニペットに相当します。

1

空のコンストラクタを使用する必要はありません。コンパイラは自動的に生成します。

1

javaのクラスには、背後で作成されるデフォルトのコンストラクタがあります。最初のものではコンストラクタを追加しました。 2番目のものは、Javaコンパイラが空のデフォルトのコンストラクタを作成します。ここ

詳細:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

希望これは役立ちます:)

-1

簡単に言えば、コンストラクタはこのような何か使用して、あなたのクラスのインスタンスオブジェクトを作成することができます:

Munikas testObject = new Munikas(); 

をNON-STATICメソッドを使用しようとすると、2つの違いが明らかになります。メソッドrytas()あなたがそうのように、クラスのオブジェクトのインスタンスを使用して、それを呼び出す必要があることを意味し、非静的である:

testObject.rytas(); 

rytasを使用した場合ので、あなたは、コンストラクタを使用する必要があります。他の人が触れたように、空のコンストラクタを作成するコードを追加する必要はありませんが、パラメータを持つオブジェクトのコンストラクタを使用する必要があることがあります。主なSTATICメソッドは、コンストラクタの有無に関係なく正常に動作し、クラス(Munikas)自体を使用して呼び出すことができます。詳細については、thisをチェックしてください。希望が役立ちます。

0

のJavaコンストラクタオブジェクトがインスタンス化されるときのようnewキーワードを使用して呼ばれている特殊なメソッドです:デフォルトコンストラクタ

ClassName referenceName = new ClassName();

public ClassName(){ // no statements }

クラス内のコンストラクタがでない場合はです。クラスにコンストラクタを定義していない場合、JVMは、のデフォルトのを1つ追加します。最初のコードで

:あなたは、それは何もしませんので、任意の文を持っていないデフォルトコンストラクタを定義している

。コンストラクタを定義しないのと同じです。第二のコードで

JVMは、自動的にあなたの最初のコードと同じデフォルトコンストラクタを定義します。したがって、コンストラクタを追加しないと効果はありません。