Java 扫描仪未关闭错误

Java 扫描仪未关闭错误,java,Java,嗨,我对编程非常陌生,今天实际上是我进入java世界的第三天。每当我用scanner编写java程序时,都会收到警告“scanner从未关闭”。请指出我做错了什么 public class App { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("what is your lucky number

嗨,我对编程非常陌生,今天实际上是我进入java世界的第三天。每当我用scanner编写java程序时,都会收到警告“scanner从未关闭”。请指出我做错了什么

public class App {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("what is your lucky number?");
        int my = scanner.nextInt();

        switch(my) {
        case 7 :
            System.out.println("your choice is correct");
            break;
        case 10 :
            System.out.println("your choice is correct");
            break;
        default :
            System.out.println("bad choice");
        }
    }
}

只需在代码末尾添加
scanner.close()

只需在代码末尾添加
scanner.close()

只需在代码末尾添加
scanner.close()

只需在代码末尾添加
scanner.close()

有一个警告,因为您的工具(编译器或IDE?)足够聪明,可以看到在您的情况下,有一个对象实现了您尚未调用的方法。实现
Closeable
的类之所以这样做,是因为通常
close()
会释放重要的系统资源,否则这些资源将被泄漏。例如,使用后需要关闭套接字或文件句柄。有一种模式可以关闭任何需要关闭的资源:

在java的任何版本中

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    // use the scanner
} finally {
    if (scanner != null) {
        scanner.close();
    }
}
即使try块中抛出异常,
finally
块也保证执行。这可以确保您不会泄漏资源

在Java7中+

try (Scanner scanner = new Scanner(System.in)) {
    // use the scanner
}

这是一个警告,因为您的工具(编译器或IDE?)足够智能,可以看到在您的情况下,有一个对象实现了您尚未在其上调用该方法的对象。实现
Closeable
的类之所以这样做,是因为通常
close()
会释放重要的系统资源,否则这些资源将被泄漏。例如,使用后需要关闭套接字或文件句柄。有一种模式可以关闭任何需要关闭的资源:

在java的任何版本中

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    // use the scanner
} finally {
    if (scanner != null) {
        scanner.close();
    }
}
即使try块中抛出异常,
finally
块也保证执行。这可以确保您不会泄漏资源

在Java7中+

try (Scanner scanner = new Scanner(System.in)) {
    // use the scanner
}

这是一个警告,因为您的工具(编译器或IDE?)足够智能,可以看到在您的情况下,有一个对象实现了您尚未在其上调用该方法的对象。实现
Closeable
的类之所以这样做,是因为通常
close()
会释放重要的系统资源,否则这些资源将被泄漏。例如,使用后需要关闭套接字或文件句柄。有一种模式可以关闭任何需要关闭的资源:

在java的任何版本中

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    // use the scanner
} finally {
    if (scanner != null) {
        scanner.close();
    }
}
即使try块中抛出异常,
finally
块也保证执行。这可以确保您不会泄漏资源

在Java7中+

try (Scanner scanner = new Scanner(System.in)) {
    // use the scanner
}

这是一个警告,因为您的工具(编译器或IDE?)足够智能,可以看到在您的情况下,有一个对象实现了您尚未在其上调用该方法的对象。实现
Closeable
的类之所以这样做,是因为通常
close()
会释放重要的系统资源,否则这些资源将被泄漏。例如,使用后需要关闭套接字或文件句柄。有一种模式可以关闭任何需要关闭的资源:

在java的任何版本中

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    // use the scanner
} finally {
    if (scanner != null) {
        scanner.close();
    }
}
即使try块中抛出异常,
finally
块也保证执行。这可以确保您不会泄漏资源

在Java7中+

try (Scanner scanner = new Scanner(System.in)) {
    // use the scanner
}

编译器发出警告,还是您在运行时收到警告?编译器发出警告,还是您在运行时收到警告?编译器发出警告,还是您在运行时收到警告?编译器发出警告,还是您在运行时收到警告?try with resources是在Java 7中引入的,而不是在Java 8中引入的。尽管它比较常见,“java<8”方法的这种特殊变化总是让我感到厌烦。由于
new
运算符从不产生
null
,因此最好在try块之前立即实例化对象,然后不必担心关联的
finally
块中的
null
测试。@JohnBollinger如果您不想添加catch块,我会同意。如果构造函数抛出了您想要捕获的异常,那么使用我介绍的模式通常是很方便的。try-with-resources是在Java 7中引入的,而不是在Java 8中引入的。尽管它相对常见,但“Java<8”方法的这种特殊变化总是让我感到不安。由于
new
运算符从不产生
null
,因此最好在try块之前立即实例化对象,然后不必担心关联的
finally
块中的
null
测试。@JohnBollinger如果您不想添加catch块,我会同意。如果构造函数抛出了您想要捕获的异常,那么使用我介绍的模式通常是很方便的。try-with-resources是在Java 7中引入的,而不是在Java 8中引入的。尽管它相对常见,但“Java<8”方法的这种特殊变化总是让我感到不安。由于
new
运算符从不产生
null
,因此最好在try块之前立即实例化对象,然后不必担心关联的
finally
块中的
null
测试。@JohnBollinger如果您不想添加catch块,我会同意。如果构造函数抛出了您想要捕获的异常,那么使用我介绍的模式通常是很方便的。try-with-resources是在Java 7中引入的,而不是在Java 8中引入的。尽管它相对常见,但“Java<8”方法的这种特殊变化总是让我感到不安。由于
new
运算符从不产生
null
,因此最好在try块之前立即实例化对象,然后不必担心关联的
finally
块中的
null
测试。@JohnBollinger如果您不想添加catch块,我会同意。如果构造函数抛出您想要捕获的异常,那么使用我介绍的模式通常是很方便的。