为什么每次我创建一个对象数组的新元素时,之前创建的元素都具有与新元素相同的属性

时间:2017-04-15 14:24:38

标签: java arrays

我创建了一个名为Tile的类,通过给它一个图像,x posit。,y posit。,width,height和graphic object来向屏幕渲染图像。这里的代码是那个班:

package tile;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import image.Assets;

public class Tile {

public static int x, y, width, height;
public static BufferedImage image;
Graphics graf;
public static int id;



public Tile(int tx, int ty, int twidth, int theight, Graphics g, BufferedImage timage, int tId)
{
this.width = twidth;
this.x = tx;
this.y = ty;
this.image = timage;
this.graf = g;
this.height = theight;
this.id = tId;

}

 public void render()
{ 

this.graf.drawImage(this.image, this.x, this.y, this.width, this.height, null);

}
//And then here are the getters and setters methods...

我想创建一个对象Tile数组,其中此数组的每个元素都有不同的属性。 所以我把这段代码写在另一个类中:

...
Tile []t = new Tile[216];
for(int i = 0; i < 100; i++)
{
 t[i] = new Tile(x, y, width, height, graphic, image, id)
 t[i].render();
}
...

但是每当它在这个数组中创建一个新的Tile对象时,在此之前创建的另一个对象具有与新创建的相同的属性。 我的错误在哪里? 感谢您的回答,请原谅我这个糟糕的英语。

1 个答案:

答案 0 :(得分:2)

不要使用静态变量。而不是写

public static int x, y, width, height;
public static BufferedImage image;
public static int id;

public int x, y, width, height;
public BufferedImage image;
public int id;

静态变量是全局变量,这意味着它们由所有实例共享。这就是创建新实例时覆盖属性的原因。