资源泄漏:“in”永远不会关闭

2022-08-31 09:47:17

为什么 Eclipse 在下面的代码中给我加热“资源泄漏:'in'永远不会关闭”?

public void readShapeData() {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter the width of the Rectangle: ");
        width = in.nextDouble();
        System.out.println("Enter the height of the Rectangle: ");
        height = in.nextDouble();

答案 1

因为您没有关闭扫描仪

in.close();

答案 2

正如其他人所说,您需要在IO类上调用“close”。我要补充一点,这是一个使用尝试的绝佳位置 - 最后阻止没有捕获,如下所示:

public void readShapeData() throws IOException {
    Scanner in = new Scanner(System.in);
    try {
        System.out.println("Enter the width of the Rectangle: ");
        width = in.nextDouble();
        System.out.println("Enter the height of the Rectangle: ");
        height = in.nextDouble();
    } finally {
        in.close();
    }
}

这可确保扫描程序始终处于关闭状态,从而保证正确的资源清理。

等效地,在 Java 7 或更高版本中,您可以使用“试用资源”语法:

try (Scanner in = new Scanner(System.in)) {
    ... 
}

推荐