使用 Scanner 扫描控制台输入并关闭它总是一个好习惯吗?
Is it always a good practice to using Scanner for scanning consol input and close it?
下面是我通常用来从控制台读取对象的代码:
try(Scanner n1 = new Scanner(System.in))
{
num = n1.nextInt();
}
我没有收到任何内存泄漏错误,所以我认为这可以完成工作是正确的。我想知道这里的情况如何。请不要使用 "bufferedreader" 主题或任何其他* 作为从控制台读取的替代方法。我想知道 "Scanner" 的工作原理。
try-with-resources
语句完成后会关闭Scanner
。由于 Scanner
附加到 System.in
,它还会关闭标准输入流,之后您将无法读取输入。例如,以下代码将导致 java.util.NoSuchElementException
:
try(Scanner n1 = new Scanner(System.in))
{
num = n1.nextInt();
}
try(Scanner n2 = new Scanner(System.in))
{
num = n2.nextInt(); // will throw an exception
}
下面是我通常用来从控制台读取对象的代码:
try(Scanner n1 = new Scanner(System.in))
{
num = n1.nextInt();
}
我没有收到任何内存泄漏错误,所以我认为这可以完成工作是正确的。我想知道这里的情况如何。请不要使用 "bufferedreader" 主题或任何其他* 作为从控制台读取的替代方法。我想知道 "Scanner" 的工作原理。
try-with-resources
语句完成后会关闭Scanner
。由于 Scanner
附加到 System.in
,它还会关闭标准输入流,之后您将无法读取输入。例如,以下代码将导致 java.util.NoSuchElementException
:
try(Scanner n1 = new Scanner(System.in))
{
num = n1.nextInt();
}
try(Scanner n2 = new Scanner(System.in))
{
num = n2.nextInt(); // will throw an exception
}