初始化扫描仪时出现错误:只要输入分号,代码就会变成斜体和蓝色。
错误消息显示:
Resource leak: 'in' is never closed.
如何避免此错误?
我的代码如下所示:
import java.util.Scanner;
public class Zoezi9 {
public static void main(String[] args) {
double cm;
int feet, inches, remainder;
final double CM_PER_INCH = 2.54;
final int IN_PER_FOOT = 12;
Scanner in = new Scanner(System.in);
System.out.print("How many cm?; ");
cm = in.nextDouble();
inches = (int) (cm/CM_PER_INCH);
feet = inches/IN_PER_FOOT;
remainder = inches % IN_PER_FOOT;
System.out.printf("%.2f cm = %d ft, %d in\n",cm,feet,remainder);
}
}
请您参考如下方法:
某些资源需要特殊处理,当以错误的方式使用它们时,您将面临资源泄漏的风险。
例如:当你打开一个文件时,底层操作系统会向 JVM 提供一个文件句柄。当您在代码使用完该文件句柄后忘记正确“返回”该文件句柄时......当它发生一次时,这不是问题。但假设您的应用程序持续运行数小时、数天、数周。然后这样的事情加起来。最坏的情况是,在某个时刻,您耗尽了该资源,然后 JVM 崩溃了。
System.in是一个InputStream,而InputStreams可以是这样的资源。现在,您的编辑器尝试帮助您:它注意到您使用了some InputStream,但是,嘿,您从未对其调用close。
就您而言,忽略该消息是安全的。在“现实世界”中,您通常可以使用 try-with-resource 来避免此类陷阱。构造。在您使用完已使用的资源后,该资源会负责关闭该资源。
跟进 Andy Turner 的评论:您不能盲目地关闭任何可以关闭的东西。通常,组件管理它自己创建的那些资源。 System.in 不属于您的类(class),也不是您的类(class)打开的。因此,从概念上讲,让您的类(class)关闭它是错误。
除此之外,具体的“警告”取决于您的编辑器/IDE 以及您所做的设置。因此,您可以简单地禁用此警告。根据您收到的警告类型,还有 @SuppressWarnings 。甚至更合适:@WillNotClose !
