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

为什么非静态变量不能从静态上下文引用-reg[duplicate]

孟俊发
2023-03-14

可能重复:
不能从静态上下文(java)引用非静态变量

public class DemoJava {

    public class Hello {

        void fun()
        {
            System.out.println("This is static fun man!!");    
        }
    }

    public static void main(String[] args) {

        Hello hello = new Hello();
        hello.fun();
    }
}

即使在这种情况下,我们也试图从静态方法访问非静态类。但这不会给出任何错误。为什么?

共有1个答案

丰佐
2023-03-14

在本例中,它会给我一个错误,因为我试图从静态方法访问一个非静态类。

不,它会给您一个错误,因为您试图创建一个内部类的实例(它隐式地引用了一个封闭类的实例),而您没有封闭类的实例。

问题不是对fun()的调用--而是构造函数调用。

例如,您可以使用以下方法修复此问题:

DemoJava demo = new DemoJava();
Hello hello = demo.new Hello();

也可以将类声明更改为:

public static class Hello

>

  • 如果类实例创建表达式是非限定类实例创建表达式,则:

    • 如果类实例创建表达式发生在静态上下文中,则会发生编译时错误。

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

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

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

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

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

    • 我有一个非常简单的类,我想用它作为另一个类的子类。但当我将其代码放入父类时,我得到: 非静态变量,不能从静态上下文中引用 另一方面,当我将子类GenTest的类代码放在“父类”的类代码之外时,我没有得到这个错误。 为什么会发生这种情况?