VS Code提示‘Resource leak: 'input' is never closed’的原因
关于Java代码中"Resource leak: 'input' is never closed"警告的原因分析
问题场景
你提供的Java代码可以正常运行,但VS Code会在第5行第17列抛出警告:Resource leak: 'input' is never closed,代码如下:
package JAVA; import java.util.Scanner; public class FirstProgram2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter the first number: "); int num1 = input.nextInt(); System.out.print("Enter the second number: "); int num2 = input.nextInt(); System.out.println("Before swapping:"); System.out.println("First number: " + num1); System.out.println("Second number: " + num2); // Swapping the numbers int temp = num1; num1 = num2; num2 = temp; System.out.println("After swapping:"); System.out.println("First number: " + num1); System.out.println("Second number: " + num2); } }
警告产生的原因
这个警告的核心原因很直接:你创建了Scanner对象input来读取标准输入流(System.in),但在代码执行结束前没有手动关闭这个资源。
Scanner属于Java的资源类,它关联着底层的输入流资源。虽然JVM的垃圾回收机制最终可能会回收这个对象,但回收时机不确定,可能导致资源被长时间占用。- VS Code的Java语言服务会自动检测这类未显式关闭的资源,抛出资源泄漏警告,目的是提醒你规范管理资源,避免潜在的资源浪费问题。
如果要消除这个警告,你可以在代码逻辑结束后添加一行input.close();,或者用Java 7及以上的try-with-resources语法让系统自动关闭资源,示例如下:
try (Scanner input = new Scanner(System.in)) { // 原有的输入、计算等逻辑代码 }
内容的提问来源于stack exchange,提问作者Saeid Lorian
相关产品推荐
相关产品推荐

