我收到如下错误:
线程中的异常" 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;
}
}
答案 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)
发生编译错误是因为Student
是New
的内部类。
由于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)
两个选项:
首先初始化外部类,然后像这样初始化内部类:
新n =新New(); 学生a = n.new学生();
有关详细信息,请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html。