java – 如果我调用静态方法,构造函数是否运行
发布时间:2020-12-15 05:12:57 所属栏目:Java 来源:网络整理
导读:我有一个名为Tile的类,带有静态方法public static Buffered Image grass(),类里面也是一个构造函数public Tile(),它设置一个变量. 所以我想知道的是,如果我从另一个类Tile.grass()调用grass()方法,构造函数会运行吗? 我假设不是因为我的grass()方法返回null
我有一个名为Tile的类,带有静态方法public static Buffered
Image 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,10,10);; } private static BufferedImage getMapSprites() { return mapSprites; } private static void setMapSprites(BufferedImage mapSprites) { Tile.mapSprites = mapSprites; } } 我可以创建一个函数,为我返回的每个tile获取mapSprite.但我认为这不会非常有效.还有其他解决方案吗? (这里仅供参考,我在Map类中调用它) public void render(){ g.drawImage(Tile.grass(),null); } 解决方法
不,如果您只调用类的静态方法,则构造函数不会运行.没有与静态方法调用相关联的类的实例.这就是mapSprites为空的原因.
要填充mapSprites,您可以将初始化它的代码移出构造函数并移动到静态初始化程序中.这样,它将在第一次引用类时运行,以便在第一次调用静态方法时正确初始化mapSprites. static { try{ Tile.setMapSprites(ImageIO.read(Tile.class.getResource("res/mas.png"))); } catch (IOException e){ e.printStackTrace(); } } 使用静态初始化程序时,必须小心避免任何异常传播.如果确实如此,那么它将被包装在ExceptionInInitializerError中,它将被抛出,这对您的程序来说将是个坏消息. 您可能还希望将(现在无用的)构造函数设置为私有,以防止实例化类,因为您的类现在是一个实用程序类,其中一切都是静态的,并且此类的实例现在是无用的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |