Chinaunix首页 | 论坛 | 博客
  • 博客访问: 428395
  • 博文数量: 54
  • 博客积分: 610
  • 博客等级: 上士
  • 技术积分: 721
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 10:52
文章分类

全部博文(54)

文章存档

2013年(27)

2012年(11)

2011年(16)

分类: Java

2013-05-24 15:23:34


点击(此处)折叠或打开

  1. public class TestCodeSeg
  2. {
  3.     static
  4.     {
  5.         System.out.println("1");
  6.     }
  7.     {
  8.         System.out.println("2");
  9.     }
  10.     public TestCodeSeg()
  11.     {
  12.         System.err.println("3");
  13.     }
  14.     public static void main(String[] args)
  15.     {
  16.         new TestCodeSeg();
  17.     }
  18. }
猜猜输出结果如何。
解释如下;
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已经输出但换行符还没输出则是:
13

2
以此类推还有:
1
3
2
等等情况
阅读(1204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~