Java 我怎样才能贴上标签并从挡块中挣脱出来?
我的代码中有一个Java 我怎样才能贴上标签并从挡块中挣脱出来?,java,break,Java,Break,我的代码中有一个try…catch结构: try { // Some code. } catch (Exception e) { if (condition) { // Break out of catch block. } // Continue catch block. } 如何标记我的catch块,以便写入break label\u NAME代替了//中断catch块。,这样执行将完全退出try…catch构造 尝试 我希望能够在catch
try…catch
结构:
try {
// Some code.
} catch (Exception e) {
if (condition) {
// Break out of catch block.
}
// Continue catch block.
}
如何标记我的catch
块,以便写入break label\u NAME
代替了//中断catch块。
,这样执行将完全退出try…catch
构造
尝试
我希望能够在catch
关键字前放置标签:
try { }
LBL: catch(Exception e) { }
因为在许多其他语言构造(例如,LBL:if(…
或LBL:for(…
)中,标签会位于关键字之前,但这会引发语法错误
我也无法将标签放在catch(异常e)
code之后
编辑
这个问题纯粹是出于对如何在Java中实现这一点的好奇,我非常清楚还有其他方法可以控制代码块中的执行流
如果我遇到标记了
catch
或类似块的代码,并使用该标签从块中断开,我想确切地知道代码在做什么,以及它是如何做的。我在评论中关于是否应该使用标签的辩论中的立场:我的立场是不惜一切代价避免使用标签,除非alterna情况更糟
在这种情况下,似乎最简单的方法是反转条件:
try {
// Some code.
} catch (Exception e) {
if (!condition) {
// Continue catch block.
}
}
假设Continue catch块
代码不是很大(这本身就是不可取的),这似乎比涉及标签要好
作为另一种选择,虽然不能标记
catch
(因为它不是语句),但可以在catch
中定义标记的块(因为块是语句):
这是相当严重的,但有一个优势,即标签更接近中断(例如,如果“//某些代码
”非常长,则可能不清楚您正在中断什么)
然而,如果你在这里引入额外的缩进级别,你也可以将其用于
if(!condition)
。我在评论辩论中的立场,关于是否应该使用标签:我的立场是不惜一切代价避免,除非选择更糟糕
在这种情况下,似乎最简单的方法是反转条件:
try {
// Some code.
} catch (Exception e) {
if (!condition) {
// Continue catch block.
}
}
假设Continue catch块
代码不是很大(这本身就是不可取的),这似乎比涉及标签要好
作为另一种选择,虽然不能标记
catch
(因为它不是语句),但可以在catch
中定义标记的块(因为块是语句):
这是相当严重的,但有一个优势,即标签更接近中断(例如,如果“//某些代码
”非常长,则可能不清楚您正在中断什么)
然而,如果你在这里引入了额外的缩进级别,你也可以用它来代替
if(!condition)
。最好的方法是把你的代码放在一个函数中,比如foo。这总是比在catch块中使用另一个try catch更好的选择
public void foo(Boolean condition){
try {
// Some code.
} catch (Exception e) {
if (condition) {
// Break out of catch block.
return;
}
// Continue catch block.
}
}
如果在尝试之后或之前有任何代码:
public void bar(){
// your code
foo(codition);
// your code.
}
最好的方法是将代码放在一个函数中,比如说foo。这总是比在catch块中使用另一个try-catch更好的选择
public void foo(Boolean condition){
try {
// Some code.
} catch (Exception e) {
if (condition) {
// Break out of catch block.
return;
}
// Continue catch block.
}
}
如果在尝试之后或之前有任何代码:
public void bar(){
// your code
foo(codition);
// your code.
}
要突破
捕获
,尝试
需要标记:
LABEL: try {
// Some code.
} catch(Exception e) {
if(condition) {
break LABEL;
}
// Remaining code.
}
同样,我确信有很多更好的代码替代方案,但这回答了问题的明确要求。要打破
陷阱,需要标记try
:
LABEL: try {
// Some code.
} catch(Exception e) {
if(condition) {
break LABEL;
}
// Remaining code.
}
同样,我确信有很多更好的代码替代,但这回答了问题的明确问题。为什么不if(condition){…}else{…}
你永远不应该使用标签。结构化编程不是这样工作的……你应该很少使用标签如何使用嵌套for循环已经是一个坏主意。提示。你想了解干净的代码,以及为什么你在嵌套任何东西时非常小心。是的,对catch块使用标签是一个糟糕的主意。告诉从另一方面来说,这是一个很好的建议。为什么不if(condition){…}else{…}
你永远不应该使用标签。结构化编程不是这样工作的……你应该很少使用标签如何使用嵌套for循环已经是一个坏主意。提示。你想了解干净的代码,以及为什么你在嵌套任何东西时非常小心。是的,对catch块使用标签是一个糟糕的主意。告诉另一方面,请不要这样做:这是一个很好的建议。假设Continue catch块代码不是很大(这本身就是不可取的),除非这是问题的关键,我不明白为什么需要标签。假设Continue catch块代码不是很大(这本身就是不可取的)除非这是问题的关键,否则我不明白为什么需要标签。这只有在尝试后没有任何内容时才可能,很明显。@AndyTurner这就是为什么我要说将此尝试捕获放在单独的函数中,并与父函数分开,在父函数中尝试调用后有代码。只有在尝试后没有任何内容时才可能,清楚吗ly.@AndyTurner这就是为什么我说把这个try-catch放在单独的函数中,从父函数中,在try-call之后有代码。我甚至不知道这是一件有趣的事情,谢谢!我甚至不知道这是一件有趣的事情,谢谢!