Метод только фигурных скобок

Почему Java принимает метод только скобки? Для чего сделано?

{
    // Do something
}

Я также заметил, что он выполняется автоматически после static-block но перед конструктором. Хотя конструктор суперкласса выполняется раньше.

Есть ли конкретная причина для этого заказа?

Это JUnit, который я сделал для определения порядка выполнения:

public class TestClass extends TestSuperClass {

    public TestClass() {
        System.out.println("constructor");
    }

    @Test
    public void test() {
        System.out.println("test");
    }

    {
        System.out.println("brackets");
    }

    static {
        System.out.println("static");
    }
}

public class TestSuperClass {

    public TestSuperClass() {
        System.out.println("super class constructor");
    }

    {
        System.out.println("super class brackets");
    }

    static {
        System.out.println("super class static");
    }
}

На выходе я получаю:

super class static
static
super class brackets
super class constructor
brackets
constructor
test

person Paolo Forgia    schedule 14.04.2017    source источник
comment
Есть ли конкретная причина для такого заказа? — это объясняется в JLS 15.9.4 — docs.oracle.com/javase/specs/jls/se8/html/   -  person Stephen C    schedule 04.09.2017


Ответы (1)


Это то же самое, что и статический блок, но только не статический. Таким образом, он будет выполняться в том порядке, в котором вы уже узнали - после суперконструктора, но перед конструктором. Однако если статический блок может быть полезен, то обычный блок не так уж и полезен. Так что это никогда не используется, но это законно. Я никогда не видел, чтобы он использовался, и не могу придумать какой-либо конкретной цели, но это часть допустимого синтаксиса. Если бы это было не так, то не было бы и статического блока.

person Michael Gantman    schedule 19.04.2017
comment
Я действительно видел, как он использовался один раз: в очень длинном методе создания компонентов пользовательского интерфейса он использовался для ограничения области действия локальных переменных. Это полусырой способ извлечения кода другим методом. Плохая практика ИМО. - person Jeremy Grand; 19.04.2017
comment
Конечно, я согласен, Джереми, ИМХО тоже плохая практика. Просто доказывает мою точку зрения, что он никогда не используется, а когда используется - этого не должно было быть. - person Michael Gantman; 19.04.2017