首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在"try“中声明的变量不在"catch”或"finally“的作用域中?

为什么在"try“中声明的变量不在"catch”或"finally“的作用域中?
EN

Stack Overflow用户
提问于 2008-09-18 17:56:24
回答 23查看 88.5K关注 0票数 157

在C#和Java语言中(可能还有其他语言),在"try“块中声明的变量不在相应的"catch”或"finally“块的作用域中。例如,以下代码无法编译:

代码语言:javascript
复制
try {
  String s = "test";
  // (more code...)
}
catch {
  Console.Out.WriteLine(s);  //Java fans: think "System.out.println" here instead
}

在此代码中,catch块中对s的引用发生编译时错误,因为s仅在try块的作用域中。(在Java语言中,编译错误是“无法解析”;在C#中,错误是“名称"s”在当前上下文中不存在“)。

这个问题的一般解决方案似乎是在try块之前声明变量,而不是在try块内:

代码语言:javascript
复制
String s;
try {
  s = "test";
  // (more code...)
}
catch {
  Console.Out.WriteLine(s);  //Java fans: think "System.out.println" here instead
}

然而,至少对我来说,(1)这感觉像是一个笨拙的解决方案,(2)它导致变量的作用域比程序员预期的更大(整个方法的其余部分,而不仅仅是try-catch-finally的上下文)。

我的问题是,这个语言设计决策背后的理由是什么(在Java、C#和/或任何其他适用的语言中)?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/94977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档