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

非静态变量,这在创建类的实例时不能从静态上下文中引用

阚砚文
2023-03-14

当我尝试将 Edge 类(子类?)的新实例添加到我的数组列表中时,我收到“无法从静态上下文中引用的非静态变量”错误。我不知道我做错了什么!

public class stuff{

    public static void main(String[] args){

        ArrayList<Edge> edges = new ArrayList<Edge>();
        edges.add(new Edge(1,2, 3, 4) );
    }

    public class Edge{

        private int x1;
        private int y1;
        private int x2;
        private int y2;
        private double distance;
        private boolean marked;

        //constructors      
        public Edge(int point1_x, int point1_y, int point2_x, int point2_y){
            x1 = point1_x;
            y1 = point1_y;
            x2 = point2_x;
            y2 = point2_y;

            int x_dist = x1 - x2;
            int y_dist = y1 - y2;
            distance = Math.hypot((double)x_dist, (double)y_dist);

            marked = false;
        }

        //methods
        public void mark(){
            marked = true;
        }
        public boolean isMarked(){
            return marked;
        }
        public double weight(){
            return distance;
        }
    }
}

共有2个答案

从焱
2023-03-14
non-static variable this cannot be referenced from a static context"

此错误表明您正在访问一个没有对象的非静态变量。要访问非静态变量,您需要该类型的对象。在没有任何对象的情况下,只能访问静态变量。

解决方案与提供的@dasblinkenlight相同。

江超英
2023-03-14

您需要使Edge嵌套类静态:

public static class Edge {
    ...
}

否则,嵌套类将保持非静态,这意味着它将保留对其外部类实例的引用。因此,只有实例方法或您可以访问外部类实例的其他位置才能实例化内部类。

一般来说,公共静态类是顶级类的良好候选。例外情况是,当它们被绑定到它们的外部类时,它们在上下文之外没有意义。例如,< code>Map。Entry在其外部< code>Map接口之外没有意义。

 类似资料:
  • 问题内容: 尝试将Edge类(子类?)的新实例添加到我的arraylist时,出现“无法从静态上下文引用的非静态变量”错误。我不知道我在做什么错! 问题答案: 您需要创建嵌套类: 否则,嵌套类将保持非静态,这意味着它将保留对其外部类实例的引用。因此,只有实例方法或您可以访问外部类实例的其他地方才能实例化内部类。 通常,公共静态类是顶级类的理想候选者。唯一的例外是,当他们将自己的外部类与外部类联系在

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

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

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

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

  • 我有错误java:non-static variable在编译行Man m1=new Man(“a1”,“b1”,11)中的代码时,这不能从静态上下文引用;怎么解决? }