在Java的方法中是否使用了自由浮动块?

2022-09-03 00:21:15

我不知道方法可以有这样的浮动块:

class X { 
    public static void main( String [] args ) {
        { //<--- start
            int i;
        } //<-- ends
    }
}

我知道方法外面有浮动块,但从来没有在里面尝试过。

这可能用于定义本地范围或其他内容。

在Java中的方法中是否有浮动块的用途?


答案 1

有用途吗?

是 - 限制局部变量的范围。

这是个好主意吗?

可能值得商榷(而且很可能是)。

“专业”阵营会说,缩小变量的范围永远不会有什么坏处。“con”阵营会说,如果你在一个方法中使用它,并且你的方法足够长,可以保证将变量的范围缩小到特定的部分,那么这可能表明你应该从不同的部分中制作单独的方法。

就个人而言,我使用它们,例如:

public void doGet(
        final HttpServletRequest request,
        final HttpServletResponse response)
  throws IOException {
    final PersistenceManager pm = PMF.get().getPersistenceManager();

    final List<ToDoListGaejdo> toDoLists;
    {
        final Query query = pm.newQuery(ToDoListGaejdo.class);
        query.setOrdering("listName asc");
        toDoLists = (List<ToDoListGaejdo>) query.execute();
    }

    final List<ToDoItemGaejdo> entries;
    {
        final Query query = pm.newQuery(ToDoItemGaejdo.class);
        query.setOrdering("listName asc, priority asc");
        entries = (List<ToDoItemGaejdo>) query.execute();
    }

    final ServletOutputStream out = response.getOutputStream();

    out.println("<head>");
    out.println("  <title>Debug View</title>");
    ....

答案 2

是的,它们有两个用途。

首先,您可以使用此类块来限制变量的范围。这有助于提高代码的可读性,因为在确定如何使用变量时,需要考虑的区域较小。此外,这可以最大限度地减少方法框架所需的“插槽”数量,从而节省堆栈空间。我会非常惊讶地发现这种优化是必要的。

其次,当您将标签附加到块上时,可以在块内使用目标跳到块的末尾。这并不像一个纯粹的声明那样邪恶,但目击事件仍然会触发危险信号和警告铃声。breakgoto


推荐