2012-04-16 7 views
6

Ich stöbere durch die Android-Quelle, nur eine Art zu lesen, und ich bin auf ein seltsames Stück Code in Android.Util.JsonReader gestoßen. Es ist wie folgt:Peculiar Java Scope

private final List<JsonScope> stack = new ArrayList<JsonScope>(); 
{ 
    push(JsonScope.EMPTY_DOCUMENT); 
} 

Was macht das genau? Das heißt, der Bereich unmittelbar nach der new Zuweisung? Wenn ich richtig verstehe, wann immer diese Klasse, JsonReader instanziiert wird, (nicht statisch, nicht wahr?), stack wird hier initialisiert, anstatt über eine this.stack = ... im Konstruktor, richtig?

Was macht dann der Umfang? Wird das ausgeführt, nachdem stack initialisiert ist? Ich bin hier nur ein wenig verwirrt, was den Namen dieses Musters und seine Verwendung angeht.

Antwort

5

Es bezieht sich nicht auf die neue Anweisung. Es ist ein Initialisierer, ähnlich einem unbenannten parameterlosen Konstruktor.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.6

Sie werden vor den Konstrukteuren einer Klasse in Text Reihenfolge

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

+0

ausgeführt Was es dann löst? Können sie mehrere sein, vermutlich nach verschiedenen Klassenfeldern? – Josh

+0

Danke, das sind ein paar tolle Links. Eine Frage, warum erscheint sie unmittelbar nach diesem bestimmten Feld? Ist es nur spezifisch für diese Klasse? Es gibt ~ 6 Felder, die auf "stack" folgen, vor dem Klassenkonstruktor, und ungefähr dem gleichen Betrag davor. – Josh

+2

Ich nehme an, es ist nur da, weil es das Stack-Feld über den Push-Aufruf manipuliert. –

Verwandte Themen