Jeden z moich znajomych zapytał mnie, który załaduje pierwszą zmienną statyczną lub blok statyczny.Która zostanie załadowana pierwsza zmienna statyczna lub blok statyczny?
Moja odpowiedź wskazuje na zmienną statyczną.
więc dał mi dwa równania i rzekł do rozróżnienia między nimi
pierwszego równania
public class Some {
public static void main(String args[])
{
System.out.println(Some.x);
}
static {
System.out.println(Some.x);
}
static int x=90;
}
O/P: 0 90
Drugie równanie
public class Some {
public static void main(String args[])
{
System.out.println(Some.x);
}
static int x=90;
static {
System.out.println(Some.x);
}
}
O/P: 90 90
Próbowałem dekompilować kod bajtowy i stwierdziłem, że jest taki sam dla obu powyższych równań. Pomóż mi je rozróżnić. Jestem zdezorientowany, kiedy zainicjowana zostanie zmienna statyczna.
Rzeczy statyczne są wykonywane sekwencyjnie, w kolejności, w jakiej są zdefiniowane w klasie. –
Czy na pewno kod bajtu jest taki sam? Spodziewałbym się, że deklaracje pojawią się w innej kolejności, a jak zaznacza @udhanshu, porządek deklaracji jest ważny. –
@ PatriciaShanahan ya dla obu kodów bajt równania jest taka sama. – Hablu