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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫嘉伟 中级黑马   /  2013-2-22 23:57  /  1484 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,那它会被运行吗?

2 个回复

倒序浏览
朋友,输出的内容:
键盘输入的内容是:普通字符串

键盘输入的内容是:WriteToProcesst@61de33
这里有一个特殊的地方,就是一个java文件里的两个类都拥有main方法。其实你只要细心一点就会发现,当你再IDE工具里运行时,它会让你选择运行哪个类。main是入口函数,对一个应用程序而言,是只允许一个main入口的。这里涉及到进程的概念。在WriteToProcess运行的时候,开启了另外一个子进程,该进程用于运行ReadStandard,而你看到的out.txt内容,实质就是,WriteToProcess的输出流的内容。
回复 使用道具 举报
我补充一下,不是不允许两个main入口,而是main会开启一个进程,两个main就会开启两个进程,这会加大内存开销。如果没有必要开启两个进程,当然就不会选择这样做了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马