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

无法从静态上下文引用非静态类[重复]

林星阑
2023-03-14

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

这是代码

public class Stack
{
    private class Node{
        ...
    }
    ...
    public static void main(String[] args){
         Node node = new Node(); // generates a compiling error
    }
}  

错误说:

不能从静态上下文引用非静态类节点

为什么我不应该在main()方法中引用Node类?

共有3个答案

栾昂雄
2023-03-14

或者您可以在public class Stack之外声明类Node

像这样,

    public class Stack
    {

        public static void main(String[] args){
             Node node = new Node();         
}        
    }  
    class Node{

    }
许博
2023-03-14

非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。作为OuterClass的成员,嵌套类可以声明为private、public、protected或package private。

要实例化内部类,您必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:OuterClass。InnerClass innerObject=outerObject.newInnerClass();

public static void main(String[] args){
         Stack stack = new Stack();
         Stack.Node node = new Stack().new Node();
    }

public class Stack
{
    private class Node{
        ...
    }
    ...
    ...
    ...  

    public static void main(String[] args){
             Node node = new Stack().new Node(); 
    }
}  
颜祖鹤
2023-03-14

Java中的非静态嵌套类包含对父类实例的隐式引用。因此,要实例化一个节点,还需要有一个堆栈实例。在静态上下文(主方法)中,没有可参考的堆栈实例。因此,编译器指示它不能构造节点。

如果将节点设置为静态类(或常规外部类),则它不需要对堆栈的引用,可以直接在静态main方法中实例化。

有关详细信息,请参阅Java语言规范第8章,例如示例8.1.3-2。

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

  • 下面的代码出现在我试图创建的包的主类中。它引用了一个名为Journey的helper类中的对象和方法。在用星号标记的行中调用方法时,我得到一个“Non static method conly be referenced from static context”错误。这使我感到困惑,因为我的印象是,在第二行中创建的Journey对象“ThisJourney”构成了类的一个实例,因此意味着上下文不是静

  • 我正在编写此代码,它显示了错误非静态方法googleapiability . isgoogleplayservicesavailable(上下文上下文)和googleapiability . get error dialog(Activity Activity,int errorCode,int requestCode)不能从静态上下文中引用。

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 为什么我会得到“无法从静态上下文引用的非静态变量”? 这是代码 错误说: 非静态类 Node 不能从静态上下文中引用 为什么不应该在main()方法中引用Node类? 问题答案: Java中的非静态嵌套类包含对父类 实例 的隐式引用。因此,要实例化a ,您还需要具有一个实例。在静态上下文(主要方法)中,没有要引用的实例。因此,编

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

  • 刚刚安装POI 3.8 jar并更改代码...我得到这个错误: 无法从静态上下文引用非静态方法getFormat(java.lang.String)