本文主要是介绍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?
➡️ 如果【没有】:
结论: 流程结束。绝对不需要 .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()举例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!