Java:使用不同的构造函数

Java:使用不同的构造函数,java,constructor,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;

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

有什么建议吗?提前感谢

您可以公开MyClass:

public static class MyClass{
    ...
}

您可以公开MyClass:

public static class MyClass{
    ...
}

您的问题是,您在
java\u main
class
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;
    }

}
您使用的ussue是因为您必须以创建内部类实例的方式创建外部类的第一个实例

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


试着找一个指导你的教程

您的问题是,您在
java\u main
class
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;
    }

}
您使用的ussue是因为您必须以创建内部类实例的方式创建外部类的第一个实例

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

试着找一个指导你的教程

它起作用了

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) {
        // 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 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;
    }
}
}试试这个

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
或者将MyClass从java_主类中取出。并从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;
    }
}
希望这对你或其他人有帮助


干杯

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

要么你像这样改变你的MyClass

public static class Myclass
或者将MyClass从java_主类中取出。并从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;
    }
}
希望这对你或其他人有帮助


干杯

主方法必须在类中。编辑:遗漏了代码的一部分,我一定是向下滚动太远了。一个Java文件中只能有一个公共类(必须与文件本身同名),即使在一个文件中放两个类,它们也不应该嵌套。是的,您可以在另一个类中拥有一个匿名类,但这不是您在这里要做的。请遵循。您(意外地?)在此文件中声明了两个类。对于绝对初学者,尝试每个文件使用一个类。你应该使用
MyClass
作为
static
@a_用户我错过了你的部分代码,向下滚动太远,更新了我的响应。但是,正如Thilo所建议的:从头开始。您的主方法必须在类中。编辑:遗漏了代码的一部分,我一定是向下滚动太远了。一个Java文件中只能有一个公共类(必须与文件本身同名),即使在一个文件中放两个类,它们也不应该嵌套。是的,您可以在另一个类中拥有一个匿名类,但这不是您在这里要做的。请遵循。您(意外地?)在此文件中声明了两个类。对于绝对初学者,尝试每个文件使用一个类。你应该使用
MyClass
作为
static
@a_用户我错过了你的部分代码,向下滚动太远,更新了我的响应。但是,正如Thilo所建议的:从一开始就开始。你应该这样做,因为你在静态方法中使用它,所以它不应该是java_main的某个具体实例的内部,我认为,应该在回答中提到。解决了这个问题,但这并不是一个很好的答案,可以帮助初学者理解到底发生了什么。你应该让静态的还是公共的?你应该这样做,因为你在静态方法中使用它,所以它不应该是java_main的某个具体实例的内部,我想,应该在答案中提到。解决了这个问题,但这并不是一个很好的答案,可以帮助初学者理解到底发生了什么。你应该让静态的还是公共的?你不应该只写代码,请解释一下,为什么没有外部类的实例就不可能创建非静态的内部类的实例。@DmitryGinzburg:+1。但是在这种情况下,根本不需要去内部类。OP很可能是偶然发现的。这里至少有5个答案可以解释;)您不应该只编写代码,请解释OP,为什么在没有外部类实例的情况下不可能创建非静态内部类的实例。@DmitryGinzburg:+1。但是在这种情况下,根本不需要去内部类。OP很可能是偶然发现的。这里至少有5个答案可以解释;)