Java中的.close()举例详解

2025-09-30 01:50
文章标签 java 详解 举例 close

本文主要是介绍Java中的.close()举例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的....

当你遇到以下三种情况时,一定要记得使用 .close():

1.操作文件

2.访问网络

3.连接数据库

用法

.close()是一种方法,所以一般是 对象.close()来调用的

作用

.close() 的作用就是释放程序占用的外部资源(如文件、网络连接),把它们“还给”操作系统,以避免资源浪费和程序崩溃。

个人理解:.close() 的本质是“有借有还”。当你向操作系统“借用”了一个外部资源(比如打开一个文件),你就有责任在用完后通过 .close() 归还它。

举例

import Java.util.Scanner;
public class Main{
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    String i = input.nextLine();
    int a = Integer.parseInt(i);
    System.out.println(a);
    }
}

这是一个简单的实现输入功能的代码,就以这个代码举例(之前发过一个“Java如何实现输出”里面有详细讲解)

如何判断代码中的 input 对象要不要用到 .close()?

我们可以遵循一个简单的两步判断流程:

第一步:查看对象的类定义(是否声明有implements AutoCloseable或 implements Closeable)

示例代码中对象为‘input’,因为这个对象是根据“ScaChina编程nner”这个类创造出来的,所以它的类是“Scanner”,长按“Ctr”鼠标放在“Scanner"上面,查看它的声明中有没有有没有 implements AutoCloseable 或者 implements Closeable?

Java中的.close()举例详解

  • ➡️ 如果【没有】

    • 结论: 流程结束。绝对不需要 .close()。

    • 例子: ArrayList, String, HashM编程ap 等。它们不管理外部资源,所以没有这个“资格”。

  • ➡️ 如果【有】

    • 结论: 这个对象有资格被关闭。它是一个需要被严肃对待的资源对象。请继续第二步判断。

    • 例子: Scanner, FileInputStream, Socket, Connection 等。

第二步:“关闭”是我的责任吗?

只有通过了第一步的对象,才需要进行这一步的审查。

  • 操作: 看你是如何创建这个对象的。

  • 提问: 创建这个对象时,它所管理的核心资源是不是 System.in、System.out 或 System.err 这三个“全局共享”资源?

  • ➡️ 如果【是】

    • 结论: 流程结束。绝对不要 .close()!

    • 解释: 你正在操作一个“预设资源”,用专业术语来讲就是“标准I/O流”,它是在你程序运行前,就由环境预先设置好的,不是由你自己写代码动态创建的”。所以关闭的责任属于Java虚拟机(JVM),不属于你。关闭它会引发严重问题。

  • 知识:什么是“标准I/O流”?
    • “标准I/O流”(Standard I/O Streams)是计算机领域的一个基础概念,你可以把它理解为程序与外界沟通的三条默认通道

    • 标准输入 (Standard Input):程序默认的数据来源通道。在Java里,它就是 System.in,通常连接到键盘

    • 标准输出 (Standard Output):程序默认的正常信息出口通道。在Java里,它就是 System.out,通常连接到屏幕

    • 标准错误 (Standard Error):程序默认的错误信息专http://www.chinasem.cn出口通道。在Jav编程China编程a里,它就是 System.err,也通常连接到屏幕

  • ➡️ 如果【不是】

    • 结论: 流程结束。你必须 .close() 它!

    • 解释:&www.chinasem.cnnbsp;这个资源是由你的代码主动“借用”的,

      如何识别“主动借用”的资源?

      所谓主动“借用”,就是指你的代码从无到有地创建了一个通往外部特定目标的连接

      你可以通过以下两个非常明显的代码特征来识别这个动作:

    • 看得见的行为:通常使用 new 关键字。
      当你写下 new FileInputStream(...) 或 new Socket(...) 时,这个 new 的动作本身就是在告诉操作系统:“请为我创建一个全新的、到外部资源的连接。” 这与直接使用已经存在的 System.in 完全不同。

    • 明确的目标:需要你提供一个具体的“地址”。
      在创建时,你必须指定一个目标,比如一个文件名 ("data.txt")、一个网址 ("example.com") 或一个数据库地址。这个“地址”参数就是一个强烈的信号,表明你正在操作一个程序外部的、需要“借用”才能访问的资源。

    • 所以当你用 new 创建一个需要“地址”的资源对象时,你就是在“借用”它,关闭的责任也自然落在了你的身上

    • 最佳实践: 立即使用 try-with-resources 语法来确保它被自动、安全地关闭。

import java.io.File;
import java.util.Scanner;

// 从文件读取,就必须关闭
try (Scanner fileScanner = new Scanner(new File("data.txt"))) {
    while (fileScanner.hasNextLine()) {
        System.out.println(fileScanner.nextLine());
    }
} catch (FileNotFoundException e) {
    System.err.println("文件未找到!");
}
// 当 try 块结束时,fileScanner 会被自动、安全地关闭
    • 例如:

      • new FileInputStream("文件名")

      • new Socket("网址", 端口)

      • dataSource.getConnection()

      • new Scanner(new File("文件名")) 

总结

到此这篇关于Java中的.close()的文章就介绍到这了,更多相关Java中.close()内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Java中的.close()举例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156107

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo