学生a的错误=新学生();

时间:2016-11-14 09:36:54

标签: java

我收到如下错误:

  

线程中的异常" main" java.lang.Error:未解决的编译问题:

     

无法访问类型为New的封闭实例。必须使用New类型的封闭实例限定分配(例如x.new A(),其中x是New的实例)。   在n.New.main(New.java:7)

以下是我的代码:

package n;

public class New 
{

    public static void main(String[] args) 
    {
        Student a=new Student();
        a.name="abc";
        a.number=6;
        a.marks=1;

        System.out.println(a.name);
        System.out.println(a.number);
        System.out.println(a.marks);
    }

    class Student
    {
        String name;
        int number;
        int marks;

    }

}

5 个答案:

答案 0 :(得分:2)

您的班级学生不是静态的,您试图从不允许的静态上下文访问它。​​

您的代码应如下所示:

package n;

public class New {

    public static void main(String[] args) {
        Student a = new Student();
        a.name = "abc";
        a.number = 6;
        a.marks = 1;

        System.out.println(a.name);
        System.out.println(a.number);
        System.out.println(a.marks);
    }

    static class Student {
        String name;
        int number;
        int marks;

    }

}

答案 1 :(得分:1)

Student是类New的非静态内部类,必须从类New的对象访问。无法直接从main访问它,因为main是静态的,Student不是。作为解决方案,只需在New之外声明它:

package n;

public class New {

    public static void main(String[] args) {
        Student a = new Student();
        a.name = "abc";
        a.number = 6;
        a.marks = 1;

        System.out.println(a.name);
        System.out.println(a.number);
        System.out.println(a.marks);
    }
}

class Student {
    String name;
    int number;
    int marks;

}

答案 2 :(得分:1)

发生编译错误是因为StudentNew的内部类。

由于Student定义为class Student,因此它只能存在于New的实例中。所以有几种方法可以解决这个“问题”。

最简单的一个:make it

static class Student 

由于这个原因,Student的单个实例不一定存在于New的实例中。

另一个是创建New的实例,您可以在其中创建Student的实例:

Student a = new New().new Student();

但是为了开始学习如何编程,我会说:删除内部Student类并以Student作为外部类开始。

public class Student {
    String name;
    int number;
    int marks;

    public static void main(String[] args) {
        Student a = new Student();
        a.name = "abc";
        a.number = 6;
        a.marks = 1;

        System.out.println(a.name);
        System.out.println(a.number);
        System.out.println(a.marks);
    }
}

首发的一些补充:

Student中包含Student(String, int, int)的构造函数,并在初始化Student的新实例时调用它,而不是在之后初始化它并设置变量:

new Student("abc", 1, 6); 

答案 3 :(得分:0)

当您尝试从静态上下文访问它时,您的内部类应该是静态的,这会产生错误。

static class Student {
        String name;
        int number;
        int marks;

    }

答案 4 :(得分:0)

两个选项:

  1. 使Student class静态
  2. 首先初始化外部类,然后像这样初始化内部类:

    新n =新New(); 学生a = n.new学生();

  3. 有关详细信息,请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html