Что означает двойная инициализация в методах Java - PullRequest
2 голосов
/ 09 марта 2019

Я использую только двойную инициализацию в Java для классов например: new ArrayList(){{add()}} Но недавно я по ошибке написал код, приведенный ниже, и JVM не разозлилась за мою ошибку.

public void test(){
    {
        {
            ....
        }
    }
}

После этого сделал простой пример и увидел следующее, но все еще ничего не понял, ожидайте порядок выполнения операторов.

public class HelloWorld{

     public static void main(String []args){
        HelloWorld hw=new HelloWorld();
        hw.test1();
        System.out.println("----------");
        hw.test2();
     }

    public void test1(){
        {
            {
                System.out.println("1");
            }
            System.out.println("2");
        }
        System.out.println("3");
    }

    public void test2(){
        System.out.println("a");
        {
            System.out.println("b");
            {
                System.out.println("c");
            }

        }

    }
}

Результат:

1
2
3
----------
a
b
c

Итак, мой вопрос в том, что означает двойная или тройная инициализация и т.д. в Java?

1 Ответ

4 голосов
/ 09 марта 2019

Это не двойная инициализация.Это блок заявления.Из документов :

Блок - это группа из нуля или более операторов между сбалансированными скобками и может использоваться везде, где разрешен один оператор.

Оператор блока заключает в себе операторы в другой области видимости.Поэтому, если вы сделали:

public static int foo() {
    {
        int foo = 0;
    }
    return foo;
}

foo не было бы в области действия в строке return foo;, и вы получили бы ошибку


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

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