2014-05-20 94 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; 
    } 
} 

希望这对你或其他人有帮助。

干杯!