引用静态上下文中的非静态变量

时间:2017-01-23 09:07:46

标签: java

我希望更好地了解如何在java中引用对象。鉴于此代码将引发错误“错误:非静态变量,这不能从静态上下文引用”:

public class Catalog {
    public class Student {
        public String name;        
        ...
        }
//Student

    public static void main (String[] args){
       Student s;
       s = new Student();
    }//main

Q1:如果在另一个文件“Student.java”中定义了类Student,为什么它可以工作?

如果我想将Student类定义保留在与main子例程相同的文件中,则帖子“Non-static variable cannot be referenced from a static context”上的解决方法是:

public class Catalog {
public class Student {
    public String name;        
    ...  
    }

    public static void main (String[] args){
        oopExample prg;        
        prg = new oopExample();
        prg.run();    
    }//main

    Student std1;
    public void run(){

       std1 = new Student();
       std1.name = "Tobby";
    }
}//oopExample

问题2:在我在单独的文件中使用Student类定义的情况下,您是否能从程序执行的角度告诉我这是否类似?

问题3:将学生声称为静态会有什么缺点?并简单地使用以下代码:

public class Catalog {
    public static class Student {
        public String name;        
        ...
        }//Student

    public static void main (String[] args){
        Student s;
        s = new Student();
}//main

感谢您的时间,

1 个答案:

答案 0 :(得分:0)

  

Q1 :如果在另一个文件“Student.java”中定义了类Student,为什么它会起作用?

因为单独文件中的(唯一)类是隐式static

  

Q2 :在我在单独的文件中使用Student类定义的情况下,您是否能从程序执行的角度告诉我这是否类似?

从程序执行的角度来看,无关紧要(只要你不能从班级Catalog访问班级Student中的某些东西(你不应该这样做,除非你有充分的理由......)

  

Q3 :将学生声称为静态会有什么缺点?并简单地使用以下代码:

Student的对象无法访问未声明Catalog的类static的属性。

但是,无论如何,这是你应该小心谨慎的事情。