【问题标题】:java try except returning after try and catch [closed]java尝试除了在try和catch之后返回[关闭]
【发布时间】:2018-02-12 09:47:53
【问题描述】:

我有以下函数体

String f(filename){
   BufferredReader br = null;
   try{..}
   catch(Exception e){
       e.printStackTrace();
   }

}

在 try 块中,我尝试打开文件并对其进行处理。在 try 块的末尾,我返回一个字符串。程序无法编译。

所以,我在 try 块之前初始化了一个字符串变量,在 try 块中操作变量并在 catch 块之后返回它。这是正确的方法吗?我的问题是为什么编译器不允许我直接返回 try 块内的字符串。此外,我试图通过在 catch 块之后执行 br.close() 来关闭文件,并且程序没有编译太多说我需要处理 IOException,所以我不得不关闭 try 块内的文件。

这也是写的方式吗?在 try 块中打开和关闭文件。

【问题讨论】:

  • 是什么让您认为它不允许这样做?关键是,每个可能的场景都需要一个 return 语句。要么,要么你需要在你的catch块中抛出一个异常
  • 如果您使用的是 java 7+,您可以使用 try-with-resource 块。 docs.oracle.com/javase/tutorial/essential/exceptions/…
  • 不,它不会继续到下一行。它跳转到 catch 块。在问题中发布您的真实代码。
  • 我的意思是在异常被捕获之后。它继续到 catch 块之后的内容
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用“编辑”链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!

标签: java io


【解决方案1】:

您必须在任何可能的情况下从函数返回一些值(或抛出异常),因此不会编译此代码:

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace(); // what is return from function in this case?  
   }
}

你应该使用下面的代码

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace();
   }
   return null; // or return "";
}

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace();
       throw new RuntimeException(e);
   }
}

【讨论】:

  • 谢谢,方法2是我做的。我还在 try 块内做了 br.close() 。这是要走的路还是构造会自动为我关闭文件。
  • @matt 搜索 try-with-resources
  • 我知道,但它有点太复杂了,我暂时不想实现它。我想知道我是否应该在 try 块内执行 br.close() 。因为在 catch 块之后我无法做到。
猜你喜欢
  • 2016-05-06
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2016-01-15
  • 1970-01-01
  • 2014-12-26
  • 2012-04-24
相关资源
最近更新 更多