使用 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
}