Java eclipse中的资源泄漏警告和行断点

Java eclipse中的资源泄漏警告和行断点,java,arrays,eclipse,Java,Arrays,Eclipse,获取数组元素的简单程序。 我在第五行收到两条信息 import java.util.*; 公共类层次结构{ 公共静态void main(字符串[]args) { 扫描仪inp=新扫描仪(System.in); int[]arr=新的int[4]; int i; 对于(i=0;i您基本上需要在使用完扫描仪后关闭它 public static void main(String[] args) { Scanner inp = new Scanner(System.in)

获取数组元素的简单程序。 我在第五行收到两条信息

import java.util.*;
公共类层次结构{
公共静态void main(字符串[]args)
{
扫描仪inp=新扫描仪(System.in);
int[]arr=新的int[4];
int i;

对于(i=0;i您基本上需要在使用完扫描仪后关闭它

    public static void main(String[] args)
    {
        Scanner inp = new Scanner(System.in);
        try
        {
            int[] arr = new int[4];
            int i;

            for (i = 0; i < arr.length; i++)
            {
                arr[i] = inp.nextInt();
            }

            System.out.println("Elements: ");

            for (i = 0; i < arr.length; i++)
            {
                System.out.println(arr[i]);
            }
        } finally
        {
            inp.close();
        }
    }

通常情况下,您需要关闭
扫描仪
–除非它包装
系统。在
中,因为您不应该关闭标准输入。Eclipse不够聪明,无法了解差异,因此它会给您一个警告。您可以安全地忽略该警告,或者使用SuppressWarnings注释

import java.util.*;
公共类层次结构{
公共静态void main(字符串[]args)
{
@抑制警告(“inp”)
扫描仪inp=新扫描仪(System.in);
int[]arr=新的int[4];
int i;

对于(i=0;iEclipse在这里是错误的,因此这是一个糟糕的建议。需要实际关闭的是实际资源。
Scanner
,就像
BufferedInputStream
和co是过滤器流-它们包装实际资源。它们本身并不需要关闭。关闭它们通常是明智的:它们可以缓冲,然后关闭ng有一个内置的刷新(并且也将关闭它们所包装的东西)。这里的关键线索是它包装的东西(
System.in
)不是由此代码创建的,因此也不应该由此代码关闭。Eclipse不应该警告filterstreams。记住这一背景:您不想关闭System.in(你也会遇到一些奇怪的情况,但在大多数情况下,这绝对不是一件合适的事情,这个问题只涉及一般性建议,而不是具体情况)。关闭扫描仪将关闭System.in。您应该更准确地了解行号。我们不知道它是哪一个。
System.in
可以通过
System.setIn更改​(…)
,因此不能保证不需要关闭
系统中的.in
try (Scanner inp = new Scanner(System.in)) 
{
//your code
}