黑马程序员技术交流社区

标题: 关于类中静态的方法、属性和代码块的执行顺序 [打印本页]

作者: java8023    时间: 2015-6-10 23:57
标题: 关于类中静态的方法、属性和代码块的执行顺序
  1. class Test
  2. {
  3.               static int i=1;
  4.               static{
  5.                                  System.out.println(i+"看看,到底是谁在前面呢");
  6.                                    show2();

  7.                }
  8.                    //static int i=1;
  9.           public static void main(String[] args){
  10.                                    Test t=new Test();
  11.                                      t.show();
  12.                       }
  13.                      public void show(){
  14.                                      System.out.println("测试专用!!!!静态方法调用非静态方法");
  15.                       }
  16.                       public static void show2(){
  17.                                         System.out.println("静态代码块调用静态方法!!没想到在后面也是可以的");
  18.                         }
  19. }
复制代码

很是迷惑,到底是谁先执行呢???于是写了一段代码:
可以得到几个结论:
1)静态代码块中调用静态变量,当静态属性在其后边时,执行错误,可以看出,是这两者是按照顺序执行的
2)静态属性要在之前定义,才能在静态代码中调用
3)但是静态方法就没事了,调用时才被执行.无顺序要求。
4)并且静态方法可以通过对象调用非静态方法,但是不可以直接调用


作者: pizhihui    时间: 2015-6-11 00:03
写得很好,谢谢分享!!
作者: java8023    时间: 2015-6-11 20:53
还是很困惑啊

作者: zhenxing133    时间: 2015-6-11 21:23
大牛,学习了
作者: duzhi409    时间: 2015-6-12 00:46
main方法,建立Test对象,然后Test类加载进内存,静态成员先进入方法区中的静态区,然后静态代码块执行(给类进行初始化),打印:1+"看看,到底是谁在前面呢"
调用show2(),因为也是静态的,所以也在静态区中,打印:静态代码块调用静态方法!!没想到在后面也是可以的
建立Test对象,t调用show(),打印:测试专用!!!!静态方法调用非静态方法
作者: java8023    时间: 2015-6-12 19:35
duzhi409 发表于 2015-6-12 00:46
main方法,建立Test对象,然后Test类加载进内存,静态成员先进入方法区中的静态区,然后静态代码块执行(给 ...

嗯 说的不错就是如此,但是若是静态成员变量在后边,就不行了,会顺序执行代码块的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2