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

为什么此java代码显示“非静态变量不能从静态上下文引用”错误?[副本]

冷翼
2023-03-14
package ttt2;
import java.util.Scanner;
public class TTT2 {
    public class State{
        int[][] sheet;
        int childCount;
        public void initialize(int n,int[][] lastState,int level){
            sheet=new int[n][n];
            childCount=n*n-1;
            State[] nextState=new State[childCount];
            nextState[0].initialize(n,sheet,level+1);
            int turn=level%2+1;
        }
    }
    public static void main(String[] args) {
        System.out.print("Enter the size(n) of the sheet(n*n):");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[][] matrix=new int[n][n];
        State s=new State();
    }

}

无论我怎么努力,我都会遇到这个问题。我尽了我所能。声明State类的对象时,显示错误“非静态变量,无法从静态上下文引用”

共有3个答案

华修永
2023-03-14

没有State类的封闭实例。要么创建TTT2的外部实例,要么将State声明为静态

State state = new TTT2().new State();
卞琨
2023-03-14

虽然我没有得到指定的异常,但它显示(在日食中)

不能访问TTT2类型的封闭实例。必须使用TTT2类型的封闭实例限定分配(例如x.newA(),其中x是TTT2的实例)。

State s=new TTT2().new State(); 

这是创建innerclass对象创建的正确方法。

曹臻
2023-03-14

这是因为非静态内部类需要实例化封闭类的实例,而您正试图从静态上下文中执行此操作:

public class TTT2 {
    public class State{ // <- non-static
    }
    public static void main(String[] args) {
        State s=new State(); // <- static context
    }
}

您有两个选择。一是也使内部类静态,因此它不再需要封闭的类实例:

public class TTT2 {
    public static class State{ // <- static
    }
    public static void main(String[] args) {
        State s=new State(); // <- no problem
    }
}

另一种是实例化一个新的TTT2用作封闭实例,缺点是您创建了一个可能不会用于其他任何东西的TTT2(至少在您的示例中):

public class TTT2 {
    public class State{ // <- non-static
    }
    public static void main(String[] args) {
        State s=new TTT2().new State(); // <- no problem
    }
}
 类似资料:
  • 问题内容: 以下代码在变量上产生了错误,con2说 我用Google搜索解决方案,并且他们暗示尚未初始化该变量以使方法可用。我初始化不正确吗?我也尝试过将事情改为公开,但这也无济于事。 问题答案: 不,实际上,你必须声明con2字段为静态: 编辑:更正,实际上是远远不够的,你将遇到相同的问题,因为getConnection2Url方法也不是静态的。更好的解决方案可能是改为进行以下更改:

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

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

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

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

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