有这样一段代码,我看不明白为什么要这样写,求教大家:
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引用的究竟是哪个文件夹下面的?
这段话可否用一种更为简洁的方式表达呢?eclipsejava

解决方案 »

  1.   

    1、为什么要用static语句块,如果不用static的语句块这种写法类似于写在默认构造函数中,每new一个对象都会执行,加上static则只是在类加载的时候执行。不过你这里即使删除了static编译不应该有问题吧。
    2、访问的到底是src目录下的还是bin目录下的,其实src目录与bin目录相当于是一个目录,你两种理解方式都可以,src是编译前的源文件目录,bin是编译后的文件目录,实际运行的时候访问的当然就是bin目录下的,但是如果src目录下没有的话,bin目录下也就不会有。
      

  2.   

    1、static 中的代码只需要执行一次,所以用static
    2、引用的是bin下的文件
      

  3.   

    静态代码块,作用是类加载时,先预做好一些动作。
    你在eclipse里访问的是src下面的image
      

  4.   

    static 中的代码只需要执行一次,所以用static
      

  5.   

    楼上几位请看清楚代码再回答问题,这里去掉括号跟是否执行一次没关系。
    去掉括号后如下,这是语法错误。
    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")), };
     
      

  6.   

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