如何让这个try..catch..finally不报[finally block does not complete normally]警告??

Rooock 2009-04-23 11:25:59

static boolean method()
{
boolean b = false;
try
{
some code here
b = true;

}catch(Exception e)
{
b =false;
throw new Exception();

}finally
{
return b;
}
}


各位,想想办法吧..我的catch需要再throw.所以catch里不能带return,否则会出现不可达代码.
...全文
244 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
GeekZFZ 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yxc0433 的回复:]
不要在finally 里面使用 return 或者 new throw()之类的,否则会引起编译器警告
[/Quote]
同意
jinxfei 2009-04-23
  • 打赏
  • 举报
回复
抛出异常,就不可能再有返回值,所以throw new Exception()和finally中的return是互斥的啊
在你的这个逻辑中,实际上finally没有价值。

而且,在这个程序中,如果程序抛出异常,则和b=false是等价的,你可以直接在外边捕捉异常,如果捕捉到异常,则必定意味着返回值为false.

一般finally都是用来处理一些资源的释放和关闭,或者执行那些无论在何种条件下都必须执行的代码。
所以,建议改成:


static boolean method(){
boolean b = false;
try{
some code here
b = true;

}catch(Exception e){
b =false;
throw new Exception();
}
return b;
}


  • 打赏
  • 举报
回复
因为如果它throw了,它就不能执行return 了(异常必定会终止某段代码),所以编译器为了执行
return 而不会去执行throw(纯属个人意见)
  • 打赏
  • 举报
回复
我觉得原代码即使有Exception了也throw不了(只要return 在finally里)
xnjnmn 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 justinavril 的回复:]
你可以考虑把b定义成类属性变量,然后你的方法只是改变它的值,而不返回值,这样你就不会有return的痛苦了。

Java code
static boolean b = false;

static void method() throws Exception
{

try{
//some code here
b = true;
}catch(Exception e){
b =false;
throw new Exception();
}finally{

[/Quote]

申明成 boolean method()标志位 b申明在外面
也成finally{
//改变b的业务逻辑
}

return b;
gesanri 2009-04-23
  • 打赏
  • 举报
回复
finally 内部使用 return 语句是一种很不好的习惯,如果try中还有return语句,它会覆盖了try 区域中 return 语句的返回值,程序的可读性差

面对上述情况,其实更合理的做法是,既不在 try block 内部中使用 return 语句,也不在 finally 内部使用 return 语句,而应该在 finally 语句之后使用 return 来表示函数的结束和返回
justinavril 2009-04-23
  • 打赏
  • 举报
回复
你可以考虑把b定义成类属性变量,然后你的方法只是改变它的值,而不返回值,这样你就不会有return的痛苦了。

static boolean b = false;

static void method() throws Exception
{

try{
//some code here
b = true;
}catch(Exception e){
b =false;
throw new Exception();
}finally{
b = true; //or b = false;
}
}
lvzhu18 2009-04-23
  • 打赏
  • 举报
回复
int i = 1/0;
System.out.println(i);
不好意思,把这两句换掉。
捏造的信仰 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 happynesslele 的回复:]
引用 1 楼 Dantin 的回复:
你把finally放catch外面。。。


同意
[/Quote]
这要怪楼主乱排版,其实 finally 本来就是放在 catch 外面的。

问题是 finally 当中不能写 return,return 应该放在 finally 的外面,作为方法的最后一句。
yxc0433 2009-04-23
  • 打赏
  • 举报
回复
如果finally上有return语句. 那么try/catch中的return语句将失效.
对于需要用return 返回一些数值的方法. 把return 语句放到finally将会出现非预期效果.
Rooock 2009-04-23
  • 打赏
  • 举报
回复
1 楼的格式不清楚..请看最新的格式. 是在catch外面的.
lvzhu18 2009-04-23
  • 打赏
  • 举报
回复
不知这样行不行

static boolean method() throws Exception {
boolean b = false;
try {
int i = 1/0;
System.out.println(i);
b = true;
} catch(Exception e) {
b =false;
throw new Exception();
}
return b;
}
Rooock 2009-04-23
  • 打赏
  • 举报
回复

static boolean method()
{
boolean b = false;
try
{
some code here
b = true;

}catch(Exception e)
{
b =false;
throw new Exception();

}finally
{
return b;
}
}

这样,看的效果好点么?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Dantin 的回复:]
你把finally放catch外面。。。
               

[/Quote]同意
yxc0433 2009-04-23
  • 打赏
  • 举报
回复
你可以这样使其不报,不过不好。

@SuppressWarnings("finally")
static boolean method()
{
boolean b = false;
try { b = true; }
catch(Exception e)
{
b =false;
throw new Exception();

}
finally {return b;}

}
yxc0433 2009-04-23
  • 打赏
  • 举报
回复
不要在finally 里面使用 return 或者 new throw()之类的,否则会引起编译器警告
Dantin 2009-04-23
  • 打赏
  • 举报
回复
你把finally放catch外面。。。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧