黑马程序员技术交流社区
标题:
初始代码块和打印流的一个问题
[打印本页]
作者:
紫衣侯
时间:
2013-5-31 18:53
标题:
初始代码块和打印流的一个问题
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会在静态代码块前面,这是为什么呢?
作者:
顾玲玉
时间:
2013-5-31 21:50
一个打印到标准输出流,一个到错误输出流
默认两者都是屏幕的
但是你在运行的命令上可以指定输出到一个文件的。
如: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");
}
}
作者:
紫衣侯
时间:
2013-6-1 12:06
顾玲玉 发表于 2013-5-31 21:50
一个打印到标准输出流,一个到错误输出流
默认两者都是屏幕的
但是你在运行的命令上可以指定输出到一个文 ...
又试了试,错误输出还是能跑到静态代码块前.
作者:
郑锐
时间:
2013-6-1 16:30
大概跟System.out.print 和 System.err.print两种输出流的不同机制有关。
两种输出流的缓冲机制还有优先级都不一样,也许混合使用它们就会导致输出结果顺序的随机性吧。
解决方法就是,一直用一种输出方法,不要混用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2