加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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中,它将被抛出,这对您的程序来说将是个坏消息.

您可能还希望将(现在无用的)构造函数设置为私有,以防止实例化类,因为您的类现在是一个实用程序类,其中一切都是静态的,并且此类的实例现在是无用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读