我的代码出了什么问题?编译器说non static variable cannot be referenced from a static context
package nestedclass;
public class Nestedclass {
class Student {
String name;
int age;
long roll;
public Student(String name, int age, long roll) {
this.name = name;
this.age = age;
this.roll = roll;
}
public void show() {
System.out.println("name : "+name+" age : "+age+" roll : "+roll);
}
}
public static void main(String[] args) {
//Nestedclass=new Nestedclass();
Student ob=new Student("ishtiaque",10,107060);
ob.show();
// TODO code application logic here
}
}
答案 0 :(得分:1)
嵌套的Student类不是静态的,这就是编译器抱怨的原因。有两种方法可以摆脱这种情况:make Student静态,或实例化Nestedclass,并在Nestedclass中提供一个非静态方法,它在Student实例上进行实际工作,并从main调用:
private void run() {
Student ob = new Student("ishtiaque", 10, 107060);
ob.show();
}
public static void main(String[] args) {
new Nestedclass().run();
}
或者,如果你喜欢oneliners,你也可以
public static void main(String[] args) {
new Nestedclass().new Student("ishtiaque", 10, 107060).show();
}
我个人更喜欢第二种方法(使用辅助方法),因为之后它更容易重构。
答案 1 :(得分:0)
您的内部类未声明为静态;因此,您无法从静态方法main
访问它。将您的内部类声明更改为static class Student
答案 2 :(得分:0)
您需要启动静态类,然后使用该类的new来启动它们的内部无类。或者您可以将Student内部类声明为静态类。
第一个解决方案
Student ob = new Nestedclass().new Student("ishtiaque", 10, 107060);
第二种解决方案
static class Strung {...}
希望有所帮助。
答案 3 :(得分:-2)
这将起作用
public class Student
{
String name;
int age;
long roll;
public Student(String name, int age, long roll) {
this.name = name;
this.age = age;
this.roll = roll;
}
public void show()
{
System.out.println("name : "+name+" age : "+age+" roll : "+roll);
}
public static void main(String[] args) {
Student ob=new Student("ishtiaque",10,107060);
ob.show();
}
}