C# 了解JDK 7-使用资源进行尝试
我是一名.net开发人员。最近,我对比较java和c产生了兴趣。我发现Java对资源的尝试相当于C#对块的使用。但是,我不能完全理解它。我知道C#的使用块是一种语言特性,编译器为其生成代码。我想更多地了解try with resources,并对其提出一些问题:C# 了解JDK 7-使用资源进行尝试,c#,java,java-7,try-with-resources,C#,Java,Java 7,Try With Resources,我是一名.net开发人员。最近,我对比较java和c产生了兴趣。我发现Java对资源的尝试相当于C#对块的使用。但是,我不能完全理解它。我知道C#的使用块是一种语言特性,编译器为其生成代码。我想更多地了解try with resources,并对其提出一些问题: 它是一个类似于C#的使用块的langauge特性吗 以下代码的等效JDK 6代码是什么: try(SomeResource resource = new SomeResource()) { //Some logic } try
try(SomeResource resource = new SomeResource())
{
//Some logic
}
try(SomeResource resource = new SomeResource())
{
//Some logic
}
catch(SomeException ex)
{
}
try(SomeResource resource = new SomeResource())
{
//Some logic
}
try(SomeResource resource = new SomeResource())
{
//Some logic
}
catch(SomeException ex)
{
}
try {
final SomeResource resource = new SomeResource();
Throwable resourceEx = null;
try {
//... use resource
} catch (Throwable t) {
resourceEx = t;
throw t;
} finally {
if(resource != null) {
if(resourceEx != null) {
try {
resource.close();
} catch (Throwable t) {
resourceEx.addSuppressed(t);
}
} else {
resource.close();
}
}
}
} catch (SomeException ex) {
//...standard error handling
}
接近。catch SomeException块涵盖了资源的初始化。此外,资源关闭逻辑发生在嵌套的try-finally块中,因此如果抛出SomeException,则在控件到达catch-SomeException块之前关闭资源。有关详细信息,请参见JLS 14.20.3.2:@GaryF:在您的代码段中,是否应该在try块中调用SomeResource的构造函数,即:try{resource=new SomeResource()}….?你们都是正确的。事实上,这要复杂得多。我已经更新了我的答案。@GaryF:在您的代码片段中,什么是gzip和gzipEx,声明在哪里?