当前位置: 首页 > 知识库问答 >
问题:

为什么我得到“不能从静态上下文引用的非静态变量”?

太叔超英
2023-03-14

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

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

另一方面,当我将子类GenTest的类代码放在“父类”的类代码之外时,我没有得到这个错误。

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

为什么会发生这种情况?

共有3个答案

南宫凯康
2023-03-14

类GenTest是一个非静态类,因此必须在JavaApp1的实例中实例化。如果您执行的是静态类GenTest,否则需要创建JavaApp1的实例,并在非静态方法中创建GenTest。

孙财
2023-03-14

当您从静态方法创建它的实例时,它应该是静态类GenTest。

此外,一般来说,内部类应该是静态的。

徐嘉谊
2023-03-14

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

选项:

>

GenTest x = new JavaApp1().new GenTest();

就个人而言,我会选择第二种方法——Java中的嵌套类有一些奇怪之处,因此我会使用顶级类,除非您有充分的理由将其嵌套。(国际海事组织,最后的选择尤其混乱。)

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

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

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

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

  • 问题内容: 我是Java新手,我正在尝试通过递归函数部署斐波那契跟踪,然后计算运行时间。这是我设法编写的代码: 问题是,当我尝试将其转换为字节码时,出现以下错误: 我想知道是什么问题?! 问题答案: 更改 至 并使该方法静态。 或者,改变 至

  • 错误来自此行板状态 addme = 新板状态(); 由于某种原因,它所指向的非静态变量是“新”的。我不清楚如何修复这个错误,因为new不应该是一个变量,也不是。 查看stackoverflow记录,该错误通常来自非静态方法,通常通过将该方法设为静态或完全绕过该方法来解决。T 下面的代码是为了引用这个语句前后发生的事情。 }……

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