Beh, ho un tale codice:Quando vengono caricate le classi?
public class Main {
public static void main(String[] args) {
Test t; //1
Integer i = new Integer(1); //2
t = new Test(); //3
System.out.println(Test4.a); //4
}
}
class Test {
private int a = 10;
private Test2 t2; //5
List<Test2> list = new ArrayList<Test2>() {
{
for (int i = 0; i < a; i++) {
add(new Test2()); //6
}
}
};
}
class Test2 extends Test3{
}
class Test3 {
}
class Test4 {
public static final int a = 4;
}
Io non so come (totalmente o parzialmente) e quando le classi vengono caricate. Quindi:
Test t;
- non è un uso attivo, ma il riferimentot
deve essere un tipo definito di. È stata caricata la classe di test (forse parzialmente, quindi quante fasi - caricamento \ collegamento \ inizializzazione - è passata) o non è successo niente?Integer i = new Integer(1);
- È stato caricato un numero intero all'avvio di JVM o su questa linea?t = new Test();
- un utilizzo attivo. È stato caricato completamente dall'inizio o da qualche punto (vedi 1)System.out.println(Test4.a);
- è stato caricatoTest4
o no?- Sono stati caricati o meno
Test2
eTest3
? Se sì allora quando?
Notando che l'inizializzazione non è la stessa del caricamento (o del collegamento). –
Se la classe ** Test ** non è caricata sulla riga (1), allora quale tipo avrà variabile ** t **? –
Nella JVM, la variabile 't' non esiste ancora; non è ancora stato assegnato. – rgettman