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

时间:2010-02-06 15:17:52

标签: java

我是一个Java新手并坚持这个:

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

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

  • 此外,当我从用户那里获得输入时,是否必须抛出IOException?

感谢。

9 个答案:

答案 0 :(得分:7)

唯一的区别是第二种形式显式地将对InputStreamReader的引用保存到变量中,这可能有用也可能没用,具体取决于你之后是否对它做了什么。

答案 1 :(得分:3)

没有区别,只是偏好。

这些方法会抛出已检查的异常,因此如果可以或者抛出调用方法,则必须处理它们。

答案 2 :(得分:3)

不同之处在于第二个更详细,并为InputStreamReader使用临时变量。您可以通过ISR替换new InputStreamReader(System.in)获得第一个版本。

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

答案 3 :(得分:2)

- 回答第1个问题 绝对没有区别,除了你将创建一个对InputStreamReader的引用,你也可以避免....我个人更喜欢避免它

- 回答第二个问题

I / O异常是检查异常,即在编译时检查异常,而我们在Java中也有未经检查的异常,这些异常在运行时检查

有关已检查和未检查的例外的更多信息,请参阅here

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

如果您之后由于其他原因需要ISR,那么您将首先使用该版本。只是一个偏好的问题,简写与详细。

答案 7 :(得分:0)

那么, 这个问题得到了全面的回答。但是,我想强调使用第一种语法,因为您可以避免分配额外的引用。此外,分配额外的引用有可能使垃圾收集器延迟其工作。它并不一定意味着它不会被垃圾收集,但它仍然会带来轻微的开销。

所以,答案是尝试始终使用第一种语法,除非您需要稍后使用ISR变量进行一些操作。

答案 8 :(得分:0)

没有区别,如果你说的话,第一张表格更加紧凑和高效,因为没有创建InputStreamReader的额外参考。