当前位置: 首页 > 面试题库 >

为什么会出现“无法从静态上下文引用的非静态变量”?

邵弘义
2023-03-14
问题内容

我有一个非常简单的类,想用作另一个类的子类。但是,当我将其代码放入父类时,我得到:

非静态变量,不能从静态上下文中引用

另一方面,当我将sublass GenTest的类代码放在“父母的”类代码之外时,JavaApp1我不会收到此错误。

public class JavaApp1 {

    class GenTest {  
        @Deprecated
        void oldFunction() {
            System.out.println("don't use that");
        }
        void newFunction() {
            System.out.println("That's ok.");
        }
    }

    public static void main(String[] args) {
        GenTest x = new GenTest();
        x.oldFunction();
        x.newFunction();
    }
}

为什么会这样呢?


问题答案:

嵌套类(顺便说一下,它 不是 子类)没有被标记为静态的,因此它是一个 内部 类,需要构造一个编码类(JavaApp1)的实例。

选项:

  • 使嵌套类静态
  • 使其不是内部类(即完全不在内部JavaApp1
  • 创建一个实例JavaApp1作为“封闭实例”:
    GenTest x = new JavaApp1().new GenTest();
    

就我个人而言,我会采用第二种方法-
Java中的嵌套类在它们周围有一些怪异之处,因此除非您有充分的理由将其嵌套,否则我将使用顶级类。(IMO的最终选择特别麻烦。)

有关内部类的更多信息,请参见JLS的8.1.3节。



 类似资料:
  • 我正在尝试编写一段代码,当我选中两个复选框中的一个复选框时,它将更改我选择按钮时显示的消息。 我收到的错误消息是: "FirstWindow.java:12:错误:不能从静态上下文消息中引用非静态变量消息="good job\n";" 对于第12、37、53、57行。我已尝试在main中声明字符串变量,但我只会收到错误: “FirstWindow。java:38:错误:从内部类引用的局部变量必须是

  • 我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?

  • 我尝试使用网络豆IDE在java中创建一个简单的类。每当我试图执行这个命令时,它都会发出这样的警告。从静态上下文引用的非静态变量“。谁能告诉我为什么会发生这种情况以及如何解决它。提前感恩节。

  • 可能重复: 不能从静态上下文(java)引用非静态变量 即使在这种情况下,我们也试图从静态方法访问非静态类。但这不会给出任何错误。为什么?

  • 我是Android编码的n00b,今天我想尝试使用定位服务。 我设置了一个简单的类和一个简单的main,只是为了得到经度和纬度。 但当我尝试调用retrive的构造时,long and latitude Android Studio弹出了一个错误: 错误:(33,16)错误:无法从静态上下文引用非静态变量纬度 这是我的位置班

  • 我编写了以下测试代码: 但会出现以下错误: 我如何让我的方法识别我的类变量?