【发布时间】:2015-07-30 06:43:40
【问题描述】:
我有一个名为Tile 的类,它有一个静态方法public static BufferedImage grass(),并且在类内部还有一个构造函数public Tile(),它设置了一个变量。
所以我想知道的是,如果我从另一个类Tile.grass() 调用grass() 方法,构造函数会运行吗?
我假设我的 grass() 方法不是返回 null。
这是我的代码:
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Tile {
public static final int size = 50;
private static BufferedImage mapSprites;
public Tile(){
try{
Tile.setMapSprites(ImageIO.read(getClass().getResource("res/mas.png")));
} catch (IOException e){
e.printStackTrace();
}
}
public static BufferedImage grass(){
return getMapSprites().getSubimage(0, 0, 10, 10);;
}
private static BufferedImage getMapSprites() {
return mapSprites;
}
private static void setMapSprites(BufferedImage mapSprites) {
Tile.mapSprites = mapSprites;
}
}
我可以创建一个函数,为我返回的每个图块获取mapSprite。但我认为这不会非常有效。还有其他解决方案吗?
(仅供参考,这是我在Map 课程中的称呼方式)
public void render(){
g.drawImage(Tile.grass(), 0, 0, null);
}
【问题讨论】:
-
测试一下怎么样?在构造函数中放置一个断点并查看。或者 System.out.println("hello from constructor");
-
不,不会。它是一个静态方法,它不构造实例。
-
@JBNizet - 唯一正确的答案
-
对,所以我唯一的解决方案是每次调用 tile 方法时设置 mapSprites?
-
它被否决了,因为一个简单的愚蠢测试会给你答案。
标签: java constructor static scope static-methods