-3

可能重复:
java:无法从静态上下文错误中引用非静态变量

我的目标是为客户端服务器聊天创建一个程序。我为服务器编写了以下代码https://github.com/jinujd/Java-networking/blob/master/Server.java 。编译后出现以下错误.

非静态变量 this 不能从静态上下文中引用。那里有什么问题?我的另一个疑问是

/*A.java*/
class A {
    String a;
    class B {
    }
    public static void main() {
    }
}

B 和 main() 可以访问变量 a 吗?

4

3 回答 3

2

Static functions/variables与类定义本身相关联,而类non-static变量class instance

Static functions/variables可以在没有类实例的情况下使用:

        A.main();

在访问non-static函数/变量时,您需要先创建对象实例

        A a = new A();
        a.getA();

由于static范围在层次结构中(在定义级别),并且它没有实例级别方法/变量的可见性,因此会抱怨。但相反是可以的,即您应该能够从非静态方法访问静态方法/变量。

解释了原因后,我相信您将能够自己更正类/方法/变量的范围。

于 2012-11-04T15:11:21.190 回答
1

你需要

static class ClientReceiver extends Thread {

不是

class ClientReceiver extends Thread {
于 2012-11-04T15:12:43.473 回答
1

non-static variable this cannot be referenced from a static context. What is the problem there?

您需要一个类的实例来从静态上下文访问非静态数据。

    public class Sample {
     String var="nonstatic variable";
    public static void main(String...args){
      Sample s= new sample();
      system.out.println(s.var);

}

} 

您的 B 类可以直接访问您的字符串 a,但您的静态 main 方法需要 A 类的实例才能访问它。

于 2012-11-04T15:13:08.900 回答