日期:2014-05-20  浏览次数:20599 次

一个关于变量和修饰符的问题
有这样一段代码,我看不明白为什么要这样写,求教大家:
	private static Toolkit tk = Toolkit.getDefaultToolkit();// 控制面板
private static Image[] tankImags = null; // 存储全局静态
static {
tankImags = new Image[] {
tk.getImage(BombTank.class.getResource("Images/tankD.gif")),
tk.getImage(BombTank.class.getResource("Images/tankU.gif")),
tk.getImage(BombTank.class.getResource("Images/tankL.gif")),
tk.getImage(BombTank.class.getResource("Images/tankR.gif")), };

}

我把static删除之后会报出错误,为什么要用static包住那个语句块?
这玩意是用eclipse编译的,目录下面的src文件夹和bin文件夹都有Images的文件夹,那么tankImages引用的究竟是哪个文件夹下面的?
这段话可否用一种更为简洁的方式表达呢?
eclipse java

------解决方案--------------------
1、为什么要用static语句块,如果不用static的语句块这种写法类似于写在默认构造函数中,每new一个对象都会执行,加上static则只是在类加载的时候执行。不过你这里即使删除了static编译不应该有问题吧。
2、访问的到底是src目录下的还是bin目录下的,其实src目录与bin目录相当于是一个目录,你两种理解方式都可以,src是编译前的源文件目录,bin是编译后的文件目录,实际运行的时候访问的当然就是bin目录下的,但是如果src目录下没有的话,bin目录下也就不会有。
------解决方案--------------------
楼上几位请看清楚代码再回答问题,这里去掉括号跟是否执行一次没关系。
去掉括号后如下,这是语法错误。
private static Toolkit tk = Toolkit.getDefaultToolkit();// 控制面板
private static Image[] tankImags = null; // 存储全局静态
tankImags = new Image[] {
            tk.getImage(BombTank.class.getResource("Images/tankD.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankU.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankL.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankR.gif")), };
 

你这么写就没问题了。

private static Toolkit tk = Toolkit.getDefaultToolkit();// 控制面板
private static Image[] tankImags = new Image[] {
            tk.getImage(BombTank.class.getResource("Images/tankD.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankU.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankL.gif")),
            tk.getImage(BombTank.class.getResource("Images/tankR.gif")), };
 

------解决方案--------------------
1.首先一点加了static表明本段代码块在本类第一次被加载的时候就执行,所谓第一次被加载可以简单理解为类的构造函数被调用的时候,但是此类以后再被加载将不再执行那块代码。其次从你给出的代码来看,这里应该是一个类定义声明变量的地方,如果将static去掉报错,那将是对tankImags变量的赋值工作,而java中的初始化一般放在类的构造函数部分或者在定义时直接初始化。
2.请详细查看getResource函数的API