2016-04-28 3 views
1

Ниже приведен мой код, задающийся вопросом, почему вместо Hello World напечатан символ null!Статическая переменная Java присваивается значение null

public class MyClass { 

    static String s1 = getMyValue(); 
    static String s2 = "Hello World!!!"; 

    private static String getMyValue() { 
     return s2; 
    } 

    public static void main(String args[]) { 
     System.out.print(s1); //outputs: null 
    } 
} 
+0

Попробуйте разместить инициализацию s2, прежде чем s1. – Berger

+3

Инициализировано по заказу декларации. Поэтому 's1' присваивается' getMyValue() ', который возвращает' null', так как 's2' еще не назначен. – Tunaki

+0

Я не дотронулся до Java за долгое время, но вам не нужно ссылаться на внутреннюю функцию, используя 'this.getMyValue()', как обычное использование в C#, PHP и, насколько я помню, Java. Может быть, что-то изменилось. Кто-нибудь может пролить свет на это? На самом деле свойства класса, которые должны быть назначены с использованием другого метода, обычно выполняются внутри конструктора. – dchayka

ответ

1

Выполнить это в отладчике, и вы Виль видеть, что s1 = getMyValue() выполняется до s2 установлено значение «Hello World !!!» ..

+0

Правильно, однако почему он не дает ошибку при возврате s2, так как не нашел s2 и s2 определяется после s1. –

+1

@MaheshSapkal Компилятор не будет анализировать каждый возможный путь, чтобы выяснить, кто вызвал 'getMyValue', и если он определен до того, как какое-либо значение используется в этом методе. –

Смежные вопросы