Klassenlader

mrbela

Bekanntes Mitglied
Hey Leute,

ich beschätige mich gerade mit den Klassenladern in Java.

Habe gelesen, dass seit Java 2 (ist das noch aktuell?!) es drei Klassenlader gibt, die in Form eines Delegationsmodells eine Hierachie bilden:

1. Bootstrap Klassenlader
2. Extension Klassenlader
3. System (Applikations) Klassenlader

Ich habe weiterhin gelesen, dass eine Klasse, die zu laden ist, in der Hierachie immer ganz nach oben durchgereicht wird. Also kommt es dann irgendwann beim Bootstrap Klassenlader an. Dieser arbeitet mit der Methode loadClass(...).

Nun meine Frage, weiterhin steht im Skript dass der System Klassenlader bspw. die Klassen aus dem Classpath aufruft. Was muss denn passieren, dass der Bootstrap Klassenlader "versagt" und das Laden der Klassen "nach unten" in der Hierachie weitergibt?

Also wann tritt der Fall ein, dass bpsw. der System Klassenlader eine Klasse lädt. Da ja erstmal mit dem obersten Klassenlader in der Hierachie dies versucht wird (also der Bootstrap Klassenlader) muss dieser ja in gewisser Weise fehlschlagen, damit dann irgendwann der System Klassenlader zum tragen kommt.

Wie läuft das genau ab?

Vielen Dank!!
 
G

Gast2

Gast
Nein, wenn eine Klasse geladen werden soll wird unten angefangen beim System Classloader. Dieser sucht im Classpath nach der Klasse. Wenn der die nicht findet sucht der Extension Classloader im lib/ext Verzeichnis nach der Klasse, danach erst der Bootstrap Classloader.
Wenn dann die Klasse nicht gefunden werden konnte gibts ne ClassNotFoundException.
 

mrbela

Bekanntes Mitglied
Ah okay.. Danke!

Deshalb auch die Classloader parent. D.h. findet ein Klassenlader nicht die Klasse, so delegiert er den Aufruf an seinen Vater-Klassenlader?!

Noch ne Frage. Worin liegen denn die Unterschiede der unten genannten Methoden (aus ClassLoader (Java 2 Platform SE v1.4.2):

Java:
1. protected  Class 	findClass(String name)
          Finds the specified class.

2. protected  Class 	loadClass(String name, boolean resolve)
          Loads the class with the specified name.

3. protected  Class 	defineClass(String name, byte[] b, int off, int len)
          Converts an array of bytes into an instance of class Class.

Gerade 1. udn 2. sind doch sehr ähnlich...

Und welche Methode benutzt der -jewilige- Klassenlader, um die Klasse zu laden??

Edit: Und wo finde ich denn den Bootstrap Klassenlader und den Extension Klassenlader? Die müssten doch auch in der API irgendwo auftauchen oder?!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mit Klassenlader Sound Ressourcen laden Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben