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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jackwang 于 2015-3-19 19:40 编辑

System.setIn()方法为什么可以调用多次而不出错?
因为System.in 这个成员是被public static final 修饰的,所以就是个全局常变量,只可以被赋值一次。但是
为什么用System.setIn()方法赋值多次,却能够成功而不出错,例如下面代码:
  1. import java.io.*;
  2. class InDemo
  3. {

  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 show();
  7.         }
  8.         public static void show()throws IOException //简单处理,只是演示问题,没有try异常
  9.         {
  10.                 System.setIn(new FileInputStream("..\\TestDemo.java"));  //赋值一次,亲测每次赋值都是成功的
  11.                 System.setIn(new FileInputStream("..\\Demo.java"));  //赋值第二次,亲测每次赋值都是成功的
  12.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  13.                
  14.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

  15.                 String line = null;

  16.                 while((line = bufr.readLine())!=null )
  17.                 {
  18.                         if("over".equals(line))
  19.                                 break;
  20.                         bufw.write(line.toUpperCase());
  21.                         bufw.newLine();
  22.                         bufw.flush();
  23.                 }
  24.                 bufw.close();
  25.                 bufr.close();
  26.         }
  27. }
复制代码
没有任何错误,编译运行全部通过!求解释

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马