Java 扫描仪未关闭错误
嗨,我对编程非常陌生,今天实际上是我进入java世界的第三天。每当我用scanner编写java程序时,都会收到警告“scanner从未关闭”。请指出我做错了什么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
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块,我会同意。如果构造函数抛出您想要捕获的异常,那么使用我介绍的模式通常是很方便的。