A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 紫衣侯 中级黑马   /  2013-5-31 18:53  /  1945 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Text{
    public Text(){
       system.out.println("2");
       system.out.println("3");
     }
pubic static void main(String[]arg){
     new Text();
  }
static{
  system.out.println("1");
}
}
记得system.out.print()和system.err.print()的区别是前者有缓冲,而后者是直接输出。而静态初始代码块是类在加载到虚拟机时加载的,但我试了几次,竟然有时 system.err会在静态代码块前面,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览

一个打印到标准输出流,一个到错误输出流
默认两者都是屏幕的
但是你在运行的命令上可以指定输出到一个文件的。
如:java Test >out.txt 2>err.txt
那么System.out.print输出到out.txt
System.err.print()输出到err.txt

你说的那种情况是不可能出现的,肯定会先执行static块,1总是在第一,但是6不一定是最后,而且2,3,4,5的顺序不会变。原因是因为他们是不同的输出流方式。同一种输出方式,肯定是先加入的先输出。

你的代码拷下来有问题,修改后如下:
public class Test {
        public Test() {
                System.err.println("2");
                System.err.println("3");
                System.err.println("4");
                System.err.println("5");
                System.out.println("6");
        }

        public static void main(String[] arg) {
                new Test();
        }

        static {
                System.out.println("1");
        }
}


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
顾玲玉 发表于 2013-5-31 21:50
一个打印到标准输出流,一个到错误输出流
默认两者都是屏幕的
但是你在运行的命令上可以指定输出到一个文 ...

又试了试,错误输出还是能跑到静态代码块前.
回复 使用道具 举报
大概跟System.out.print 和 System.err.print两种输出流的不同机制有关。
两种输出流的缓冲机制还有优先级都不一样,也许混合使用它们就会导致输出结果顺序的随机性吧。
解决方法就是,一直用一种输出方法,不要混用。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 鼓励下

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马