黑马程序员技术交流社区
标题:
求帮看代码
[打印本页]
作者:
莫嘉伟
时间:
2013-2-22 23:57
标题:
求帮看代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class WriteToProcesst{
public static void main(String[] args) throws IOException{
Process p=Runtime.getRuntime().exec("java ReadStandard");
try(
PrintStream ps=new PrintStream(p.getOutputStream());){
ps.println("普通字符串");
ps.println(new WriteToProcesst());
}
}
}
class ReadStandard{
public static void main(String[] args){
try(
Scanner sc=new Scanner(System.in);
PrintStream ps=new PrintStream(new FileOutputStream("out.txt"));){
sc.useDelimiter("\n");
while(sc.hasNext()){
ps.println("键盘输入的内容是:"+sc.next());
}
}catch(IOException e ){e.printStackTrace();}
}
}
对这代码有点疑问,第一是在生成的文件中只有键盘输入的内容,在ps.println("普通字符串");
ps.println(new WriteToProcesst()); 这两语句的作用完全没体现出来,第二就是像这样一个源文件中定义几个类,个个都有main()方法那运行起来是怎么运行的,我的意思是如果这代码我不用exec方法启动ReadStandar,那它会被运行吗?
作者:
陈科宇
时间:
2013-2-24 13:04
朋友,输出的内容:
键盘输入的内容是:普通字符串
键盘输入的内容是:WriteToProcesst@61de33
这里有一个特殊的地方,就是一个java文件里的两个类都拥有main方法。其实你只要细心一点就会发现,当你再IDE工具里运行时,它会让你选择运行哪个类。main是入口函数,对一个应用程序而言,是只允许一个main入口的。这里涉及到进程的概念。在WriteToProcess运行的时候,开启了另外一个子进程,该进程用于运行ReadStandard,而你看到的out.txt内容,实质就是,WriteToProcess的输出流的内容。
作者:
陈科宇
时间:
2013-2-24 13:14
我补充一下,不是不允许两个main入口,而是main会开启一个进程,两个main就会开启两个进程,这会加大内存开销。如果没有必要开启两个进程,当然就不会选择这样做了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2