这一章节我们来讨论一下finally用来做什么?
答案:回复资源到原始状态。如数据库连接、文件流、图形等等。
由于java里面没有析构函数,但是有垃圾回收机制,try里面的都是以局部变量进行操作,所以内存都会得到释放,但是很多时候我们在try外面就已经定义了的变量,然后在try里面赋值使用,如数据库连接、文件流、图形等等,那么现在就必须使用finally来使得它们恢复到最初的状态。
下面是几个例子:
(1)文件流
package com.ray.ch10;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream(new File("c:\123.txt"));
fis.read();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(2)数据库连接,下面是不完整的例子。
package com.ray.ch10;
import java.sql.Connection;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) {
Connection conn = null;
try {
// dosomething
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
最后我们讲一下return联合finally一起使用。
package com.ray.ch10;
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
try {
if (i == 4) {
System.out.println("return");
return;
}
throw new Exception();
} catch (Exception e) {
System.out.println("check");
e.printStackTrace();
} finally {
System.out.println("finally");// 每一次都执行
// 下面的代码是不执行的
if (i == 6) {
System.out.println("break");
break;
}
}
}
}
}
输出:
0
check
java.lang.Exception
at com.ray.ch10.Test.main(Test.java:13)
finally
1
check
java.lang.Exception
at com.ray.ch10.Test.main(Test.java:13)
java.lang.Exception
at com.ray.ch10.Test.main(Test.java:13)
java.lang.Exception
at com.ray.ch10.Test.main(Test.java:13)
finally
2
check
finally
3
check
finally
4
return
finally
从输出可以看见,每一次循环都执行了finally,然后在i==4的时候结束程序,这个时候finally里面的另外一个句子其实是永远都不会被执行的。
总结:我们这一章节主要简单讲述了finally用来做什么。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
从头开始学习Java课程-资料来源PillsInformática。
形式的指南将显示在特定练习中要做什么。 每次练习只修改指定区域的程序代码。 每个特定文件夹中的 Markdown 都会提供更详细的说明。 不会提供任何答案。 用例经过精心设计,以确定代码的成功运行。 不要记住代码。 ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
赖世雄英语从头学 下载-附件资源
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
java实现验证码功能源码 Java Periphery 是一个高性能库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码...
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
2D-Java-Tile-Game 我第一次进入 Java 世界! 这是一个周末项目,旨在创建一个基于 2D 瓷砖的基本游戏。 一切都是从头开始编写的(从创建一个基本的 JFrame,到制作画布,渲染图形等......)。 在 src 目录中查看...
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
从头学XML和Java编程一例通.part2.rar
java源码字符串缓冲区 这是 Java String 、 StringBuilder和StringBuffer方法/API 的完整指南。 本指南的源代码示例在我们的本地开发环境中进行了良好的测试,您可以将这些示例用作无错误。 您可以在 上了解更多信息...
Java机器人 这是一个从头开始编写JavaScript机器人
如果您了解一点C或JavaScript,本指南就是从头开始学习Java。 这是一个正在进行的工作,应该在下一个Java LTS(Java 17)发布时准备就绪。 所有代码都在启用预览功能的Java 14上运行。 注意:如果您只希望查看...
Java系列13-Spring Boot 实际上,我们将从头开始逐步开发项目。 我们将详细检查Spring Boot开发环境和体系结构。 借助Spring Boot,我们将探索公司Java项目的基础架构。 您可以通过Spring Framework为自己带来美好的...
Java-TCP-GUI-聊天 介绍 作为我的理学学士学位的交流课程的一个项目,我被要求制作一个聊天应用程序。 我完全是从头开始制作此程序的,没有从其他来源复制任何功能。 我知道代码不是很完美,但是在我还承担其他学术...