繁体   English   中英

Java:使用不同的构造函数

[英]Java: Using different constructors

这是我自己学习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).

有什么建议么? 提前致谢!!!

您遇到的问题是您已将java_main类包含在MyClass

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适用于不是对象一部分的代码部分,它仅由其路径包围(方法必须在类中)。

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

您可以将MyClass公开:

public static class MyClass{
    ...
}

有用 ...

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

将您的代码更改为此:

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

试试这个

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

}

您遇到的问题是您无法从静态上下文(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;
    }
}

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

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM