我觉得是 123啊,因为静态块先于main方法执行,加载类最先执行,然后是构造块跟构造器不知道解释的对么,LZ??

解决方案 »

  1.   

    System.err.println("3"); 恒生太贱了
      

  2.   

    三个代码块的执行顺序是
    先类的静态(static)初始化,
    再实例初始化(本例中没有),
    最后执行构造方法public TestCodeSeg()。main方法只是用来输出结果
      

  3.   

    额。就是1
                  2
                  3
    么。。我特意去百度的System.err.println
      

  4.   

    看错了。。
    三个代码块的执行顺序是
    先类的静态(static)初始化----System.out.println("1");
    再实例初始化----System.out.println("2");
    最后执行构造方法public TestCodeSeg()。main方法只是用来输出结果 
      

  5.   

    奇怪了,我用命令窗口,最原始的的编译方法 javac命令编译,然后运行,怎么总是1 2 3  没有别的结果!!
    奇怪了,我用命令窗口,最原始的的编译方法 javac命令编译,然后运行,怎么总是1 2 3  没有别的结果!!
      

  6.   

    123.我来说一下。静态是随着类的加载而加载。所以先执行1,这时对象还没有加载。当new对象时,构造函数语句开始初始化,初始化过程是父类构造函数执行,属性进行隐式初始化,构造代码块开始执行,属性开始显式初始化,构造函数的自定义语句执行。于是执行顺序是1,2,3
      

  7.   

    老有人喜欢拿thj里面的代码来糊弄小白
      

  8.   

    1和2顺序是不变的,因为它们是静态(类装载时被执行),3是在构造函数里。所以,程序执行顺序是静态部分然后是构造函数。但是输出结果还要收到System.out和System.err的影响。System.out是行缓冲而System.err是不缓冲,所以System.err.println("3")是立即输出。但System.out.println("1")和System.out.println("2")则因为缓冲的原因可能稍晚(但1和2的顺序不变)。具体输出结果1先2后是绝对的,但3在哪里出现跟程序执行时情况有关。如果System.err.println("3")执行时,1和2还没输出,再是则是3先:
    3
    2
    1
    如果1已经输出但换行符还没输出则是:
    132
    以此类推还有:
    1
    3
    2
    等等情况
      

  9.   

    两种情况 
    312   12ERR导致输出错误出现312情况,因为已经输出3,所以后面不会再持续
    之所以出现12,是因为3为无效输出  
      

  10.   

     System.err.println("3");
    看来笔试一不小心就被阴了
      

  11.   


    有个疑问:System.err.println()虽然是行缓冲,但是其在每次调用的时候都会自动添加一个回车,相当于flush了缓冲区,应该立即输出才对啊?
      

  12.   

    26楼:
    System.err是没有缓冲的,你是说System.out是行缓冲,然后System.out.println()会自动加上换行对吧?
    关键在换行符还没处理之前是缓冲的,所以有个时间段(因为只有一个字符1或者2,所以很短)。如果在这个时间段System.err.println()被调用了,那么它可能先输出。
      

  13.   

    = = 恒生不是用delphi的吗...
      

  14.   

    1 2 3 3的位置不确定。
     System.err.println("3"); 改成System.out.print("3") 就是123,静态块先于main方法执行,加载类最先执行,最后进入构造块。