Подтвердить что ты не робот

Что делает два последовательных блока кода {} {}?

Возможный дубликат:
Анонимные кодовые блоки в Java

Я просто натолкнулся на следующее.

if ( test ) {
    {
        // statements 1
    }
    {
        // statements 2
    }
}

Это первый раз, когда я это видел. Как это работает?

4b9b3361

Ответ 1

Он просто пишет два разных блока кода, чтобы скрыть локальные переменные.

Из ответа на вопрос "Анонимные кодовые блоки в Java:

Блокирует ограничение области видимости.

public void foo()
{
    {
        int i = 10;
    }
    System.out.println(i); // Won't compile.
}

На практике, однако, если вы обнаружите, что используете такой блок кода, это, вероятно, признак того, что вы хотите реорганизовать этот блок на Метод.

Ответ 2

Два примера, где это может быть (слегка) полезно - в модульных тестах и ​​в графических интерфейсах, которые часто включают повторяющийся код:

Это полезно в создании GUI, где невероятно легко вырезать и вставлять строки, относящиеся к одному компоненту, и забывать обновлять их для нового компонента, что приводит к труднодоступным ошибкам, например:

    JButton button1 = new JButton("OK");
    button1.setEnabled(false);
    button1.setAlignmentX(-1);

    JButton button2 = new JButton("Apply");
    button1.setEnabled(false);
    button1.setAlignmentX(-1);

К сожалению, я только что сконфигурировал button1 дважды. Если вы поместите каждую кнопку в свой собственный блок, то эта ошибка подхвачена компилятором. Опять же, вы можете создать каждую кнопку в отдельном методе, но это может затруднить просмотр происходящего (особенно учитывая отсутствие параметров ключевых слов в Java):

JButton button_ok = makeButton("OK", false, -1);
JButton button_apply = makeButton("Apply", true, 1);
// what exactly is being set here?

...

// much later:
private static JButton makeButton(String name, boolean enabled,
        int alignment)
{
    JButton button = new JButton(name);
    button.setEnabled(enabled);
    button.setAlignmentX(alignment);
    return button;
}

... и вы можете получить множество методов, каждый из которых обрабатывает различные варианты параметров, и каждый из них может использоваться, возможно, дважды.

Ответ 3

Два блока независимы. Таким образом, любые переменные, которые могут иметься в первом блоке, не будут доступны во втором блоке - или где-либо вне первого блока. Он называл изоляцию кода или область охвата.

Ответ 4

{} вводит область и переменные, объявленные в пределах области действия, существуют только для этой области. Например:

if ( test ) {

    int i = 0;


    float i = 0;
}

не удалось скомпилировать, поскольку i был объявлен дважды в той же области.

if ( test ) {
    {
        int i = 0;
    }

    {    
        float i = 0;
    }
}

будет компилироваться отлично, поскольку i не был объявлен дважды в той же области.

Ответ 5

Ничего. Они объявляют блоки кода. Обычно вы их не использовали. Единственная разница будет заключаться в том, что если вы объявите переменную в первом, она не будет доступна во втором.

Ответ 6

Два блока выполняются последовательно. Каждый блок определяет новую область для локальных переменных. Таким образом, вы могли бы

 int i;

в обоих блоках.

Ответ 7

Это анонимные блоки. Они используются для ограничения объема. Не только в java, но и на других языках, таких как С# и C.