Почему метод доступен в Java до его объявления? - PullRequest
3 голосов
/ 10 июня 2019

Я проходил через концепцию hoisting в JavaScript, где все объявления функций и переменных поднимаются до выполнения какого-либо выполнения, и именно поэтому функция доступна до ее фактической части объявления.

Мне интересно, как именно это работает в Java.

Рассмотрим следующий код:

package declarationOrder;

public class Main {

    int num = init();

    int init() {
        return 5;
    }
}

Как именно метод init() доступен для вызова до того, как будет достигнута часть объявления?

Рассмотрим другой пример:

package declarationOrder;

public class Main {

    int num1 = num2; // compiler error
    int num2 = 5;
}

Как получается, что порядок объявления переменных играет здесь роль?

Почему и как метод трактуется по-другому?

1 Ответ

5 голосов
/ 10 июня 2019

Компилятор следует порядку загрузки содержимого (атрибутов, методов, статических блоков, ..) в классе в Java:

В вашем случае первым загружается метод, затем атрибуты класса.

об атрибутах, которые будут загружены в порядке инициализации, вы получите ошибку во втором примере, потому что num2 упоминается раньше num1, если вы измените порядок, он будет работать нормально:

int num2 = 5;
int num1 = num2;

Для получения более подробной информации смотрите 12.4.2. Подробная процедура инициализации

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