Java中的这种语法是什么意思?

问题描述:

我是一个Java新手,坚持了这一点:Java中的这种语法是什么意思?

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); 

InputStreamReader ISR = new InputStreamReader(System.in);  
BufferedReader BR = new BufferedReader(ISR); 
  • 它们之间有什么区别?

  • 另外,当我从用户获取输入时,是否强制抛出IOException?

谢谢。

唯一的区别是第二个窗体显式地将对InputStreamReader的引用保存为一个变量,根据后来对它做些什么,该变量可能有用也可能没有用。

没有区别,只是一个偏好问题。

这些方法会抛出检查异常,所以如果可以的话,你必须处理它们或者向调用方法抛出。

+0

同意。唯一的区别是通过ISR再次引用InputStreamReader。使用第一个可能会很好,所以他以后不会意外使用ISR,并且可能会拧紧BRs状态。 – 2010-02-06 15:24:01

+0

同意,但希望它是在当地的方法范围内完成的,所以暂时不会很长时间。 – duffymo 2010-02-06 15:28:46

区别在于第二个更详细,并且使用InputStreamReader的临时变量。通过用代替new InputStreamReader(System.in)获得第一个版本。

但两者都做同样的事情。后面的优点是,你仍然可以通过变量ISR(如果你有/想)在代码的后面访问InputStreamReader

除了第一个不允许您在没有仔细检查异常的情况下区分两个对象实例化的异常之外,两者之间没有真正的区别。

  1. 其实第二个变种允许你直接使用ISR,在这种情况下它可能会导致一些问题。 但是,如果关闭BR失败,第二个变体还允许您关闭ISR。
  2. 不,这不是强制性的。向他展示人类可读的消息更好。

它们会产生相同的结果。基于BR和br1中的System.in的BufferedReader。

如果您以后因为其他原因需要ISR,那么您将首先使用该版本。只是一个优先事项,速记与详细。

- 答到第一个问题 是绝对不同的是,你将要创建的InputStreamReader参考没什么区别也再次就可以避免....我个人倾向于避免它

- 答到第二问题

I/O异常是检查异常i。Ë例外是在编译期进行检查,同时我们有unchecked异常也是在Java中,其在运行时

检查更多的检查,检查异常,你可以参考here

好, 问题得到全面回答。但是,我想强调使用第一种语法,因为您可以避免分配额外的引用。而且,分配额外的参考资料有可能使垃圾收集器拖延工作。这并不一定意味着它不会垃圾收集,但它仍然会造成一些小的开销。

因此,答案会尝试在任何时候都使用第一种语法,不同之处在于您需要稍后使用ISR变量进行一些操作。

没有区别,只是第一种形式更紧凑和高效,如果你可以说,因为没有额外的参考InputStreamReader创建。