要打印输出,我们只需使用System.out流,而要获取输入,我们必须System.in在Scanner对象的构造函数中传递www.example.com,然后仅使用该对象。为什么会这样呢?为什么没有像System.in.nextInt()这样的直接方法呢?
yruzcnhs1#
System.in 只是一个InputStream。一个很多年前设计的非常通用的接口。改变这个方面会破坏很多现有的代码。所以改变System.in的类型是不可行的。另一方面,将scanner方法添加到流中会使现有的类膨胀。考虑一下诸如单一责任原则或关注点分离之类的概念。你看,好的面向对象设计是关于拥有一个负责的小类,而不是两个,不是5个或10个。但我认为您有一定的观点--如果Java今天被重写,那么输入流最终可能会更方便。
6pp0gazn2#
Scanner是一个在标准Java类库中定义的类,您可以使用它从控制台读取,如下所示:
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
然而,这个构造器可以做更多的选择,例如,你可以从一个文件中读取,而不是像这样控制台:
Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); }
所以基本上取决于构造器,你可以选择你想从哪里读取你的输入。此外,在流中有多种表示整数的方法。Scanner.nextInt()将它们作为文本字符串读取。DataInputStream.readInt()将它们作为二进制数据读取。如果你把它们弄混了,人会输入1234而得到825373492,或者计算机会输入825373492而得到1234。两者都会混淆。通过指定Scanner或DataInputStream,就不会有这样的意外或错误,因为你已经预先说明了“读取整数”的意思。读这个:https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
Scanner.nextInt()
DataInputStream.readInt()
1234
825373492
ovfsdjhp3#
System.in和System.out之间的一个重要区别是,尽管两者都是流,但其中一个流更特殊。
System.in
System.out
static InputStream in static PrintStream out
InputStream的对应物是OutputStream,但是Java设计者将类变量out设置为PrintStream,这就是为什么System.out的方法比System.in的方法更专业的原因。至于为什么会这样,请看@GhostCat的回答。
InputStream
OutputStream
out
PrintStream
3条答案
按热度按时间yruzcnhs1#
System.in 只是一个InputStream。一个很多年前设计的非常通用的接口。改变这个方面会破坏很多现有的代码。所以改变System.in的类型是不可行的。
另一方面,将scanner方法添加到流中会使现有的类膨胀。考虑一下诸如单一责任原则或关注点分离之类的概念。
你看,好的面向对象设计是关于拥有一个负责的小类,而不是两个,不是5个或10个。
但我认为您有一定的观点--如果Java今天被重写,那么输入流最终可能会更方便。
6pp0gazn2#
Scanner是一个在标准Java类库中定义的类,您可以使用它从控制台读取,如下所示:
然而,这个构造器可以做更多的选择,例如,你可以从一个文件中读取,而不是像这样控制台:
所以基本上取决于构造器,你可以选择你想从哪里读取你的输入。
此外,在流中有多种表示整数的方法。
Scanner.nextInt()
将它们作为文本字符串读取。DataInputStream.readInt()
将它们作为二进制数据读取。如果你把它们弄混了,人会输入
1234
而得到825373492
,或者计算机会输入825373492
而得到1234
。两者都会混淆。通过指定Scanner或DataInputStream,就不会有这样的意外或错误,因为你已经预先说明了“读取整数”的意思。读这个:https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
ovfsdjhp3#
System.in
和System.out
之间的一个重要区别是,尽管两者都是流,但其中一个流更特殊。InputStream
的对应物是OutputStream
,但是Java设计者将类变量out
设置为PrintStream
,这就是为什么System.out
的方法比System.in
的方法更专业的原因。至于为什么会这样,请看@GhostCat的回答。