2014-05-20 95 views
1

這是我第一天學習java(在我自己的),所以我需要一些幫助。 這是我的代碼:Java:使用不同的構造函數

public class java_main { 

    public static void main(String[] args) { 
     MyClass my = new MyClass(3,4); 
     MyClass your = new MyClass(); 
    } 

    public class MyClass { 
     public int a,b; 

     public Myclass(int i, int j) { 
      a = i; 
      b = j; 
     } 

     public Myclass() { 
      a = 1; 
      b = 2; 
     } 
    } 
} 

我得到這個錯誤:

No enclosing instance of type java_main is accessible. Must qualify the allocation with an enclosing instance of type java_main (e.g. x.new A() where x is an instance of java_main). 

有什麼建議?提前致謝!!!

+2

你的主要方法必須在課堂上。 編輯:錯過了你的代碼的一部分,我必須向下滾動太多 你只能在Java文件中擁有1個公共類(它必須與文件本身具有相同的名稱) 即使你把兩個類在一個文件中,它們不應該嵌套。 是的,你可以在另一個班級有一個匿名班,但這不是你在這裏做的。 – Stultuske

+0

請關注[本教程](http://docs.oracle.com/javase/tutorial/)。 – Maroun

+0

我認爲沒有錯誤。當我在我的系統中運行你的代碼時它工作正常 –

回答

3

你的問題是你已經包含在java_mainMyClass

public class java_main { 

    public class MyClass { 

    } 

} 

取出java_main,以獲得有效的結果。

public class MyClass { 

    public static void main(String[] args) { 
    MyClass my = new MyClass(3,4); 
    MyClass your = new MyClass(); 
    } 


    private final int a,b; 

    public Myclass() { 
     this(1,2); 
    } 

    public Myclass(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 

} 

您所擁有的應用程序需要創建外部類的第一個實例才能創建內部實例。

public static void main(String[] args) 
    { 
     java_main outer = new java_main(); 
     Myclass my = outer.new Myclass(3,4); 
     Myclass your = outer.new Myclass(); 
    } 

關鍵字靜態應用到的代碼是不是僅通過其路徑包圍的物體的一部分的部件(該方法必須是類)。

試着找到一個指導你的教程。

2

你可以使MyClass的市民:

public static class MyClass{ 
    ... 
} 
+0

您* *應該**這樣做,因爲你在靜態方法中使用它,所以它不應該是java_main的具體實例的內部,我認爲應該在答案中提及。 –

+0

解決了這個問題,但完全沒有一個好的答案來幫助絕對的初學者理解正在發生的事情。 – Thilo

+0

你應該使靜態或公共? –

0

它的工作原理...

public class java_main{ 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Myclass my = new Myclass(3,4); 
     Myclass your = new Myclass(); 
     System.out.println("keval"); 
    } 

} 
class Myclass 
{ 
    public int a,b; 

    public Myclass(int i, int j) 
    { 
     a = i; 
     b = j; 
    } 

    public Myclass() 
    { 
     a = 1; 
     b = 2; 
    } 
} 
0

你的代碼改成這樣:

public class java_main { 

    public static void main(String[] args) 
    { 
     Myclass my = new Myclass(3,4); 
     Myclass your = new Myclass(); 
    } 
} 

class Myclass 
{ 
    public int a,b; 

    public Myclass(int i, int j) 
    { 
     a = i; 
     b = j; 
    } 

    public Myclass() 
    { 
     a = 1; 
     b = 2; 
    } 
} 
+1

你不應該只是寫代碼,請解釋一下OP,爲什麼不能創建非靜態內部類的實例而沒有外部類的實例。 –

+0

@DmitryGinzburg:+1。但在這種情況下,根本不需要甚至進入內部課堂。 OP可能只是偶然偶然發現的。 – Thilo

+0

這裏有至少5個解答的答案;) –

0

剛剛嘗試這一點,

public class java_main { 

public static void main(String[] args) { 
    MyClass my = new java_main().new MyClass(3, 4); 
    MyClass your = new java_main().new MyClass(); 
} 

public class MyClass { 
    public int a, b; 

    public MyClass(int i, int j) { 
     a = i; 
     b = j; 
    } 

    public MyClass() { 
     a = 1; 
     b = 2; 
    } 
} 

}

更好的方法是移動公開課分爲 按照Java命名標準,類名應以大寫字母開頭。

在這裏,我剛剛創建了一個java_main的實例,並通過使用該實例爲MyClass創建了一個實例。如果你不想讓MyClass成爲靜態內部類,這是一種方法。

別人做MyClass的靜態內部類,將工作,但它取決於使用的情況下,

公共類java_main {

public static void main(String[] args) { 
    MyClass my = new java_main().new MyClass(3, 4); 
    MyClass your = new java_main().new MyClass(); 
} 

public class MyClass { 
    public int a, b; 

    public MyClass(int i, int j) { 
     a = i; 
     b = j; 
    } 

    public MyClass() { 
     a = 1; 
     b = 2; 
    } 
} 

}

0

您所遇到的問題是你不能引用非靜態變量(MyClass的實例)來自靜態上下文(java_main類中的主菜單)。

你要麼改變MyClass的這個樣子,

public static class Myclass 

或者取出MyClass的出java_main類的。並從MyClass中刪除公共訪問修飾符。因爲在同一個文件中不能有兩個公共類。

public class java_main { 

    public static void main(String[] args) 
    { 
     Myclass my = new Myclass(3,4); 
     Myclass your = new Myclass(); 
    } 
} 
class Myclass 
{ 
    public int a,b; 

    public Myclass(int i, int j) 
    { 
     a = i; 
     b = j; 
    } 

    public Myclass() 
    { 
     a = 1; 
     b = 2; 
    } 
} 

希望這對你或其他人有幫助。

乾杯!