java 有没有with语句_Java中的try-with-resources语句
在这个Java程序示例中:
package test;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
public class Test
{
private static void example(){
String url = "jdbc:oracle:thin:@//localhost:7856/xe";
String user = "user";
String password = "pass";
try(Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement()){
throw new OutOfMemoryError("Error");
}catch (SQLException e){
System.err.println("SQLException");
}
}
public static void main(String [] args){
try{
example();
}catch (OutOfMemoryError e){
System.err.println("OutOfMemoryError");
}
// Rest of code here...
}
}
当在静态方法example()的主体中抛出OutOfMemoryError错误时,在终止静态方法example()之前,Connection“con”和Statement“stmt”会自动关闭,尽管没有任何捕获这些的“catch”错误,所以在main()的其余代码中确保这两个对象是关闭的?
谢谢.
解决方法:
是; try-with-resources构造总是关闭资源,即使它是一个未经检查的throwable(如OutOfMemoryError).
这在JLS 14.20.3中指定,它以一个非常通用的语句开始,即资源“自动关闭”,但随后会进入资源关闭时的各种示例.基本上,任何非空资源总是被关闭,就好像close已经在为一个资源创建的try-finally的finally子句中.即使在try中有多个资源,也就是这种情况(例如,“关闭一个资源时的异常不会阻止关闭其他资源”).
简单的类来演示它:
public class Twr {
private static class TwrCloseable implements AutoCloseable {
private final String id;
TwrCloseable(String id) {
this.id = id;
}
@Override
public void close() {
System.out.println("closing " + id);
}
}
public static void main(String[] args) {
try (TwrCloseable closeable1 = new TwrCloseable("first");
TwrCloseable closeable2 = new TwrCloseable("second")) {
throw new OutOfMemoryError();
}
}
}
输出:
closing second
closing first
Exception in thread "main" java.lang.OutOfMemoryError
at Twr.main(Twr.java:19)
请注意,它们以相反的顺序关闭; “第二个”在“第一个”之前关闭.在您的示例中,这意味着Statement在Connection之前关闭,这正是您想要的.
标签:java,try-with-resources
来源: https://codeday.me/bug/20190830/1770761.html
java 有没有with语句_Java中的try-with-resources语句相关推荐
- java中的循环语句_Java中三种常用的循环语句,一看就懂~
循环语句:满足一定条件的情况下反复执行一个操作. Java中提供三种常用的循环语句: 1.while循环语句 while先判断为真,再执行while循环语句,如果条件为假,则跳出循环 语法如下: Wh ...
- java for嵌套for循环语句_java中的for循环嵌套语句怎么执行?
展开全部 控制语句--for:语句的嵌套应用:累加求和,计数器:循环嵌套. 一.语62616964757a686964616fe58685e5aeb931333365646232句的嵌套应用 语句嵌套 ...
- java 如何跳出if语句_java中跳出或终止if语句的方法
1.break break:跳出当前循环:但是如果是嵌套循环,则只能跳出当前的这一层循环,只有逐层break才能跳出所有循环.for (int i = 0; i < 10; i++) { if ...
- java中循环语句_Java语法基础之循环结构语句详解
一.循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 ...
- java中的异常处理语句_Java中实现异常处理的基础知识
Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...
- java中简单的if语句_java中if语句的写法
if语句 if 语句的语法如下:if(布尔表达式){ //如果布尔表达式为true将执行的语句 } 如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码. 免 ...
- java中的四个跳转语句_Java中的流程控制语句 (基础篇四)
流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制 程序中的流程控制主要有三种:顺序流程.选择流程.循环流程. 顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结 ...
- java do while 循环语句_java中do...while循环语句使用方法详解
do..while循环语句也称为后测试循环语句,它的循环重复执行方式,也是利用一个条件来控制是否要继续重复执行这个语句.与while循环所不同的是,它先执行一次循环语句,然后再去判断 - do...w ...
- java if 定义变量赋值_Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)...
---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...
- java常见的报错_Java中常见的错误有哪些?
原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...
最新文章
- [BZOJ2527]Meteors
- kalivm 虚拟机访问win文件夹_利用vmware搭建属于自己的win虚拟环境
- CentOS7安装RabbitMQ集群
- GDT,LDT,GDTR,LDTR 详解,包你理解透彻
- Spring小知识——profile配置
- Mysql安装两种方法
- Angular应用里具有back功能的按钮实现
- JVM性能提升50%,聊一聊背后的秘密武器Alibaba Dragonwell
- 线程锁定CPU linux,linux 线程与CPU绑定
- 创建一个django的项目 使用自创的虚拟环境
- 算法题丨Next Permutation
- MySQL 常见索引的使用场景与区别(SQL小技巧)
- zookeeper 进入客户端_Zookeeper基础知识简单介绍
- php curl 伪造IP来源的代码分享
- Python常见陷阱
- 内网部署GPS定位系统方案
- 【解决:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2....Could not star】
- 读书印记 - 《我们人类的基因:全人类的历史和未来》
- 昆明计算机学校录取分数,云南省昆明铁路机械学校2021年招生录取分数线
- Google Earth Engine(GEE)——美国俄勒冈大学制作的可视化土地分类下载器
热门文章
- 使用Magicodes.SwaggerUI快速配置SwaggerUI以及设置API分组
- 程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁
- .NET Core 容器化调查
- 物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线
- Entity Framework Core 懒加载
- ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍
- 升级ASP.Net Core项目
- 【三维激光扫描】实验02:StonexSiScan新建项目、加载点云数据
- ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法
- 利用Excel VBA实现批量数据分组转置