2017-05-25 5 views
1

私は昨日始めたように、まったく新しいJavaです。初心者Q:Javaのオプションの引数

私には2つのコンストラクタがありたいと思うクラスがあります:引数を持たないものと1つのコンストラクタです。

たぶん、これは簡単であるべきでは:私は)(私のメインからこれを呼び出すと

public class sortList { 

    public int ncell, npart, cell_n, index, Xref; 

    // constructor(s):                                    

    public void sortList() {                                  
     initLists(1, 1); 
    } 

    public void sortList(int ncell_in, int npart_in) { 
     initLists(ncell_in, npart_in); 
    }  

    private void initLists(int ncell_in, int npart_in) { 
     /* DO STUFF */ 
    } 
} 

は:

sortList mySL = new sortList(5, 6); 

... javaは文句:

2つのメソッドを書き込むことによって、コンストラクタをオーバーロード
myDSMC.java:5: error: constructor sortList in class sortList cannot be applied to given types; 
      sortList mySL = new sortList(5, 6); 
         ^ required: no arguments  
found: int,int  
reason: actual and formal argument lists differ in length 
1 error 

(興味深いことに、私はちょうどC++の超シンプルなDSMCコードを翻訳しています...)。

私は何か愚かなものがありますか?

ありがとうございました。

+0

サイドノート:Javaに近いユニバーサルスタイルの一部は、**大文字の**でクラス名を開始することです。あなたのコンストラクターはあなたのクラスと同じ名前を持ち、また大文字になります。他のすべてのメソッドは、小文字で始まります。 –

答えて

3

これはコンストラクタではありません-Peter、彼らは通常の方法があります:あなたは、任意のコンストラクタを宣言していないので

public sortList() {...} 
public sortList(int ncell_in, int npart_in) {...} 

public void sortList() {...} 
public void sortList(int ncell_in, int npart_in) {...} 

は、戻り値の型を除去することにより、コンストラクタにそれらを変更しますsortListクラス(クラスと同じ名前の2つの通常のメソッドを宣言したばかりです)では、デフォルトのパラメータなしコンストラクタのみが使用可能でした。

+0

よく働く。ありがとう、トン。 – mrentropy

1

Javaのコンストラクターには戻り値の型がなく、クラスの名前と同じ名前が付いています。 javaのすべてのメソッドには戻り値の型(void - 返すものがない場合)があります。 クラスにコンストラクタを指定する必要はありませんが、このときは注意が必要です。コンパイラは、コンストラクタを持たない任意のクラスに対して、引数のないデフォルトのコンストラクタを自動的に提供します。このデフォルトのコンストラクタは、スーパークラスの引数のないコンストラクタを呼び出します。この状況では、コンパイラーは、スーパークラスに引数のないコンストラクターがない場合にはそれを検証する必要があるため、例外を返します。あなたのクラスに明示的なスーパークラスがない場合、それは引数のないコンストラクタを持つObjectの暗黙のスーパークラスを持ちます。コンストラクタとメソッドの

例:

// for this class default no-args constructor implicitly created 
public class Test1 { 
    int id; 

    // regular method 
    public int getId() { 
     return id; 
    } 

    // regular method 
    public int test1() { 
     return 1; 
    } 
} 


public class Test2 { 

    int id; 

    // no-args constructor 
    public Test2() { 
    } 

    // overloaded constructor 
    public Test2(int id) { 
     this.id = id; 
    } 

    // regular method 
    public int getId() { 
     return id; 
    } 

    // regular method 
    public void test2() { 
     System.out.println("1"); 
    } 
} 

すべての定義されたコンストラクタが暗黙のうちに​​を呼び出します。したがって、Test2のコンストラクタは実際に次のようになります。

public Test2(int id) { 
     super(); 
     this.id = id; 
    }