Voglio solo sapere perché Object, String ecc. Hanno un blocco statico {} alla fine.che è l'uso del blocco statico nella classe dell'oggetto.Perché la classe Object ha un blocco statico?
Aprire il prompt cmd e digitare
javap java.lang.Object
Voglio solo sapere perché Object, String ecc. Hanno un blocco statico {} alla fine.che è l'uso del blocco statico nella classe dell'oggetto.Perché la classe Object ha un blocco statico?
Aprire il prompt cmd e digitare
javap java.lang.Object
Quello che state guardando è solo tutte le dichiarazioni di metodo e di campo. Poiché il blocco statico è un po 'come un metodo, vedrai semplicemente la dichiarazione vuota di un initalizer statico.
Se si guarda alla OpenJDK source code per java.lang.Object
sulla linea 40, il codice in realtà dice che questo
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
Una semplice spiegazione del blocco statico è che il blocco unico viene chiamato volta, no importa quanti oggetti del tipo crei.
Se volete maggiori informazioni dalla riga di comando, javap -verbose java.lang.Object
uscite questa
static {};
descriptor:()V
flags: ACC_STATIC
Code:
stack=0, locals=0, args_size=0
0: invokestatic #16 // Method registerNatives:()V
3: return
LineNumberTable:
line 41: 0
line 42: 3
}
Oppure, meno prolissa javap -c java.lang.Object
static {};
Code:
0: invokestatic #16 // Method registerNatives:()V
3: return
Se si desidera leggere riguardo a cosa registerNatives()
, puoi leggere questo post.
Credo che questo dovrebbe essere aggiunto alla descrizione del comando javap. Doc dice "Quando non si usano le opzioni, il comando javap stampa il pacchetto, i campi protetti e pubblici e i metodi delle classi passati ad esso, il comando javap stampa il suo output su stdout." http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javap.html o sono impliciti in uno degli articoli sopra? –
@ShireResident: credo che un blocco statico sia definito dall'ambito pacchetto-privato. (Poiché non è presente alcun modificatore pubblico/privato/protetto su di esso) –
Mi sono concentrato in particolare sui "campi" e sui "metodi". Non pensavo che il blocco statico fosse considerato uno di quelli. –
La prego di sostituire l'immagine con il testo effettivo del codice in questione? –
Questo è solo un inizializzatore statico, in pratica ... –
@MUSTKEEMMANSURI L'hai appena chiesto nella tua domanda. Non è necessario pubblicare un commento che dice la stessa cosa. –