类初始化,也就是静态初始化。
类加载的时候执行
如果不要static就是对象初始化了

解决方案 »

  1.   

    什么叫类初始化,和对象初始化,那么上面的用法,假设是类初始化是执行 
    static {
            registerNatives();
        }
    这有什么意义呢,registerNatives();这个方法里面没有任何的动作呀
      

  2.   

    如果有static,即静态成员定义,首先初始化static的变量 Static只初始化一次,在第二次创建类的对象的时候,就不会去执行static的语句
      

  3.   

    对,只再第一次初始化而类对象是只要你new一次就初始化一次static {
    }
    是静态类的构造函数
      

  4.   

    请问这里的static{}是怎么回事,是一个静态方法吗,怎么连名字也没有,这是什么用法。
    请高手解疑,谢谢答:你上面那个类是去实现一个Serializable的接口,我看了那个接口,没有一个方法。
        然后你定义一个方法registerNatives,后面你去调用这个方法。流程就这样。
        static{}这个是一个静态块,是不需要名字的,里面的方法是全部都是静态的。
      

  5.   

    static{}这里的程序什么时间执行?什么情况下会执行?需要什么显式的调用吗?
    这个东西通常用于做什么,就是说什么情况下,这样的写法常用?
      

  6.   

    请问:
    xq_zz() ( )
    tom2005(快乐着) 
    static{}这里的程序什么时间执行?什么情况下会执行?需要什么显式的调用吗?
    这个东西通常用于做什么,就是说什么情况下,这样的写法常用?
      

  7.   

    这就是代码块吗!static有好几种形式,
    有static attribute,
    static method,
    static block.其实java中attribute、method、block这三种形式本来就有.你上面的程序就是block的static 用法.你感到诧异,
    可能你没注意过java中的block.
    你看下面的代码就知道了.
    public class JBlock
    {
       private int i=1;
       private int j=2;
       private static int k=3;
       private static int l;
        //这是一个block
       {
    System.out.println("Here is block!");
    l=5; //it can set value!
    i=0;
    System.out.println(k+l);
        }
        //这是一个static block
        static
        {
    System.out.println("Here is static block!");
    System.out.println(k+l);
    print();
    //main();   error!可见即使在static block中也不可以调用main()方法
        }
         // Constructor
        public JBlock()
        {
    System.out.println("Here is Constructor!");
        }
        //static main() 方法
        public static void main(String [] args)
         {
    System.out.println("Here is main!");
    JBlock block = new JBlock();
         }

        //static method
        public static void print()
         {
    System.out.println("Here is static function codes!");
         }
    }
    其执行效果为:
    Here is static block!
    3
    Here is static function codes!
    Here is main!
    Here is block!
    8
    Here is Constructor!由此可见,它们的执行顺序为:
    static block > static function > static main() > block > constructor.
    而且仅管static block在static main()之前执行,你也不可以调用main()方法.
    你可能感到奇怪,为何block会在constructor 之前呢,
    这我也不知道,你问java的高手或问编jvm的人吧!你别认为我把static block写在static main()之前所以才先调用,其实不是这样的,
    你就是把static block和static function写在static main()之后,
    它还是这样的执行顺序!static 是属于类的,只有jvm把它加载进来时,它才被执行,且只被执行一次!有些static的注意点,楼上的兄弟也讲了,
    我就不再多说了!
      

  8.   

    ▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣注意呀!我犯错了!
    我刚才说错了,
    应该是static main()最先执行,
    因为它是程序的入口,
    不过"here is main!"为何显示在中间呢?
    应该是main()执行时,
    它什么事都不干,
    除非等到把static block和static function执行完后再执行main()中的代码!
    我犯了这个错误,
    真的不好意思,
    让大家耻笑了!
      

  9.   

    static {   }是一个静态块,,类初始化时只执行一次,它是属于类的!!
      

  10.   

    static 当其所属类第一次被jvm加载时jvm自动调用它.
    当然你也可以自己显式调用它们,但有一个例外,即static main()可不是让你随便调用的!static attribute一般是类的属性,如Student类它可以有static int studentTotalNum属性.
    这个属性不依对象而存在,你即使没new出一个对象实例,它也是存在的.值为0.
    而且根据OOP的思想,你不把它定义为类属性也不可能.任何一个student对象没有义务要有studentTotalNum.这是属于Student类的.
    定义成static还有个好处,可以节省内存空间!所有的student对象共享这个变量值!
    其实说白了,它的目的就是在类中变量共享!static method主要就是操作static attribute的!
    还有,你不能在static method中操作实例变量!
      

  11.   

    ▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣▄◣注意呀!我犯错了!
    我刚才说错了,
    应该是static main()最先执行,
    因为它是程序的入口,
    不过"here is main!"为何显示在中间呢?
    应该是main()执行时,
    它什么事都不干,
    除非等到把static block和static function执行完后再执行main()中的代码!
    我犯了这个错误,
    真的不好意思,
    让大家耻笑了!
    ======================================
    main不是先运行的
    jvm先载入要运行的类,初始化static变量和执行static块
    然后在类中寻找main方法,没找到的话就会出现一个很常见的异常
    找到的话,则执行main
      

  12.   

    Static {  }是静态块的用法,可以初始化,静态变量。
      

  13.   

    static {
            registerNatives();
        }
    这个方法是类的初始化,就是第一次创建这个类时,   static {}里的方法都只执行一次,包括里面定义的变量等,在第二次创建这个类时。就不在执行static {}里的方法~!