无法从静态上下文中引用非静态变量

时间:2014-10-01 21:18:06

标签: java

我的代码出了什么问题?编译器说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
    }
}

4 个答案:

答案 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();
    }
  }