ClassLoader ist dafür zuständig, die Klassendateien zu laden, und wir wollen sehen, was passiert, wenn wir unsere eigenen Klassen schreiben.
Beispiel 1:
class StaticTest {
static int a;
int b;
int c;
}
Jetzt können wir sehen, dass die Klasse "StaticTest" 3 Felder hat, aber es gibt keine Mitgliedsvariable b,c. Aber warum? OK Lass uns mal sehen. Hier sind b und c Instanzvariablen, die den Speicher zum Zeitpunkt der Objekterstellung erhalten. Also bekommen b,c hier noch keinen Speicher. Deshalb gibt es auch keine Existenz von b,c. Es gibt also nur die Existenz von a. Für ClassLoader gibt es nur eine Information über a. ClassLoader erkennt b,c noch nicht, weil es ein noch nicht instanziiertes Objekt ist.
Sehen wir uns ein anderes Beispiel an: Beispiel 2:
class StaticTest {
public void display() {
System.out.println("Static Test");
}
public static void main(String []cmd) {
display();
}
}
Wenn wir nun versuchen, diesen Code zu kompilieren, gibt der Compiler einen CE-Fehler aus. CE: Nicht statische Methode display() kann nicht aus einem statischen Kontext referenziert werden.
Für ClassLoader sieht es nun so aus:
class StaticTest {
public static void main(String []cmd) {
display();
}
}
In Beispiel 2 liegt der CE-Fehler daran, dass wir eine nicht statische Methode aus einem statischen Kontext heraus aufrufen. Daher ist es für ClassLoader nicht möglich, die Methode display() zur Kompilierzeit zu erkennen, so dass ein Kompilierzeitfehler auftritt.