【问题标题】:static value changes to first value when a new object is created创建新对象时,静态值更改为第一个值
【发布时间】:2015-12-02 16:01:21
【问题描述】:

我有两个静态整数值,我正在绘制迷你圆圈以在框架上创建字母的数字表示, 我必须为每个字母使用一次类。我的问题是在 Draw 类开始时的坐标 X:100 Y:100 在创建对象 draw2 后具有相同的值,但它应该是 x:165 y:100 数字在 Draw 类中增加。我该如何解决这个问题?

    JFrame frame = new JFrame("test");
    frame.setVisible(true);
    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Draw draw = new Draw('A');
    frame.add(draw);
    Draw draw2 = new Draw(' ');
    frame.add(draw2);

绘图类

public class Draw  extends JPanel{
boolean[][] letterArray;
static int X = 100, Y = 100;

【问题讨论】:

  • 欢迎来到 Stack Overflow。不幸的是,您的描述非常不清楚。也不清楚为什么你的变量是静态的。请发布一个简短但完整的问题演示,并解释您实际想要实现的目标。
  • 我必须在课堂上保留坐标,我的 X 坐标必须改变,因为我必须从 Draw 类创建 12 个对象,每个对象只会创建一个数字字母表示。这是家庭作业,这是我们想要的
  • 恐怕还不清楚为什么需要静态变量。我会在您创建 Draw 对象时指定位置。尽管您现在发布了 一些 更多代码,但它远非一个简短但完整的程序。
  • 仍然不是minimal reproducible example,你还没有正确解释为什么你认为你需要静态变量。
  • 主题可以删除

标签: java variables object static


【解决方案1】:

静态变量绑定到类。与绑定到其所属实例的普通成员变量不同。

class ExampleA {
    static int value; // a class member
}

class ExampleB {
    int value;  // an object member
}

ExampleA a1 = new ExampleA(), a2 = new ExampleA();
ExampleA.value = 10;
System.out.println("a1.value=" + a1.value);  // 10
System.out.println("a2.value=" + a2.value);  // 10

a1.value = 25;  // changes ExampleA.value really
System.out.println("a1.value=" + a1.value);  // 25
System.out.println("a2.value=" + a2.value);  // 25

ExampleB b1 = new ExampleB(), b2 = new ExampleB();
b1.value = 5;
b2.value = 10;
System.out.println("b1.value=" + b1.value);  //  5
System.out.println("b2.value=" + b2.value);  // 10

换句话说:ExampleA 的所有实例共享同一个value 变量。但是ExampleB 的每个实例都有自己的value 变量。

【讨论】:

  • 是的,我正在使用这个属性,但是当我创建一个实例时,静态值在这个项目中再次获得 100 值,但我尝试了另一个类,它正常工作
猜你喜欢
  • 2018-12-01
  • 2020-12-26
  • 1970-01-01
  • 2016-01-10
  • 2021-11-04
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多