2017-12-03 2 views
0

Unten finden Sie eine rechtliche Java-Programm, das 5.Static Block vs Static Erklärung in Bezug auf die Variablen [Java]

fein und Drucke läuft Kann mir jemand helfen, zu verstehen, was mit den Variablen im statischen Block vor sich geht. Warum kann x zweimal offiziell deklariert werden? Hat die statische Deklaration Vorrang vor dem statischen Block?

Blockiert die statische Blockvariable 'x' die statische Variable 'x', die oben in diesem kleinen Programm deklariert wurde. Wenn ja, wie wird darauf zugegriffen?

public class App{ 

    static int x = 2; 
    static int z; 

    static{ 
    int x = 3; 
    z = x; 
    } 

    public static void main(String args[]){ 
    System.out.println(x+z); //Output is 5. 
    }    

}

Thankyou.

+2

Es ist keine Frage der Priorität, es ist eine Frage des Umfangs. Das zweite 'x' wird lokal deklariert und ist wie alle statischen Methoden nur im Bereich des statischen Blocks sichtbar. Um auf die äußere Variable innerhalb des Blocks zuzugreifen, können Sie 'App.x' verwenden. – shmosel

Antwort

1

Die x im statischen Block ist ein lokale Variable des statischen Block und den shadows static int x. Es ist nicht eine andere Deklaration der statischen Variablen x - es ist eine Deklaration von lokalen Variable x innerhalb der static Block. Um auf das äußere x zuzugreifen, können Sie es mit App.x innerhalb des static Blocks referenzieren, wie Sie woanders können.

Das Verhalten ist nicht anders als eine lokale Variable in dem Konstruktor einer Klasse deklarieren:

public class App { 
    int i = 0; 
    int j; 

    public App() { 
    int i = 2; // This i is a local variable in the constructor 
    j = i; 
    } 
} 

Die i im Konstruktor ist eine lokale Variable und Schatten this.i, aber sobald der Konstruktor ausgeführt wird, die local i ist verloren, und this.i bleibt 0 wie ursprünglich deklariert.

Der Baustein static funktioniert analog. Sie können es sich wie einen statischen Konstruktor vorstellen, einen Konstruktor der Klasse, im Gegensatz zum "normalen" Konstruktor, der Instanzen (Objekte) einer Klasse konstruiert.