编译过程中,类加载的时候,static int prt(...){...}就已经初始化 并驻 内存了,所以根本不需要你去初始化。

解决方案 »

  1.   

    为了证明静态函数没有被初始化我在Insect 中加入了另一个静态函数prt2(){}
    class Insect {
      int i = 9;
      int j;
      Insect() {
        prt("i = " + i + ", j = " + j);
        j = 39;
      }
      static int x1 = prt("static Insect.x1 initialized");  
      static int prt(String s) {  System.out.println(s);return 47; } 
      static int prt2(String s) {  System.out.println(s);return 47; } // 此处根本没有被初始化}public class Beetle extends Insect {
      int k = prt("Beetle.k initialized");
      Beetle() {
        prt("k = " + k);
        prt("j = " + j);
      }
      static int x2 =
        prt("static Beetle.x2 initialized");
      public static void main(String[] args) {
        prt("Beetle constructor");
        Beetle b = new Beetle();
      }
    } ///:~但是输出结果为static Insect.x1 initialized
    static Beetle.x2 initialized
    Beetle constructor
    i = 9, j = 0
    Beetle.k initialized
    k = 47
    j = 39
    我经过反复单步执行,发现只要是Insect 类(base class)中的静态成员都被初始化了,但是静态函数prt2()由于没有用到单步执行的时候就没有走到那里,这表明prt2()根本没有被初始化,请问那位大侠能指点一下啊?注:单步执行的时候就是模拟了类被装载
      

  2.   

    初始化一般是针对类的成员来说的,所以那个函数根本不存在初始化的问题,只存在初次被调用的问题!
    所有的static成员在类初次加载时初始化,并且只初始化一次!
      

  3.   

    ft........
    prt2()是一个函数一个方法。
    没有初始化的概念
    初始化是针对属性而言的。。
      

  4.   

    静态方法与属性是完全的两个概念.
    因为属性必须要开辟空间存放(即初始化).
    而方法只有在调用的时候才"初始化".
    你在
    public static void main(String[] args){
        在这里调你那个静态方法//此时那个方法被调用,所以"初始化"    
    }...........