Java:使用不同的构造函数

时间:2014-05-20 09:45:11

标签: java constructor

这是我第一天学习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).

有什么建议吗?在此先感谢!!!

6 个答案:

答案 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();   
   }

关键字static适用于不属于对象的代码部分,它仅由其路径包含(方法必须在类中)。

尝试找到可以指导您的教程。

答案 1 :(得分:2)

你可以公开MyClass:

public static class MyClass{
    ...
}

答案 2 :(得分: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;
    }
}

答案 3 :(得分: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;
    }
}

答案 4 :(得分: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作为静态内部类它将起作用,但它取决于用例,

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;
    }
}

}

答案 5 :(得分:0)

您遇到的问题是您无法从静态上下文(java_main类中的主菜单)引用非静态变量(MyClass的实例)。

要么像这样改变你的MyClass,

public static class Myclass

或者从java_main类中取出MyClass。并从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;
    }
}

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

干杯!