Was passiert "at compile time"

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich hätte mal ne wirklich grundlegende frage: Was genau passiert eigentlich alles zur compile time.
Also wenn ich das richtig verstanden habe verwendet Java dynamic linking, was bedeuted das die class /interfaces die ich in meiner selbst geschrieben class benötige erst zur runtime von der JVM geladen werden.
Meine frage ich jetzt wie das genau ablaeuft. also wenn ich eine benötiget class nicht auf meinem Classpath habe bekomme ich ja ne fehlermeldung ("symbole can not be found"). Ist das der classLoader der da mekert oder welches Element der VM stellt sicher das alle Klassen vorhanden sind?

Wenn das compelieren functioniert hat, habe ich ja ne .class datei die den bytecode beherbert, und einen symbolischen link der auf meine benötigte class verweist.... ist das so richtig? Aber was passiert wenn ich zweimal die class in meine Classpath definiert habe (also ausversehen) und unterschiedliche version von der gleichen class vorliegen. Ich habe mal gelsen das der ClassLoader nur einmal die gleiche class läd und dann "Anfragen" von den auszuführenden Progammen and diese bereits geladene class richtet.

Könnte mir einer vielleicht nen referenz empfehlen wo ich das alles mal (in ruhe) nachlesen könnte?
 

Wildcard

Top Contributor
Ist das der classLoader der da mekert oder welches Element der VM stellt sicher das alle Klassen vorhanden sind?
Nein. Der Compiler prüft seinen Suchpfad und versucht alle Referenzen aufzulösen. Wenn er nicht erfolgreich ist, beschwert er sich. Classloader existieren zur Runtime.

Wenn das compelieren functioniert hat, habe ich ja ne .class datei die den bytecode beherbert, und einen symbolischen link der auf meine benötigte class verweist.... ist das so richtig?
Nein, der Bytecode kennt keine class Dateien, in ihm stehen (unter anderem) Klassennamen.
Aber was passiert wenn ich zweimal die class in meine Classpath definiert habe (also ausversehen) und unterschiedliche version von der gleichen class vorliegen. Ich habe mal gelsen das der ClassLoader nur einmal die gleiche class läd und dann "Anfragen" von den auszuführenden Progammen and diese bereits geladene class richtet.
Das hängt von der Classloader Hierarchie ab.
Grundsätzlich läuft das ganze so:
Klasse X will Klasse Y verwenden. Wenn sie dem Classloader der Klasse X geladen hat (oder einem Parent dieses Classloaders) bereits bekannt ist, stellt das kein Problem dar.
Ansonsten fragt der Classloader der Klasse X geladen hat bei seinem Parent nach. Das ganze geht dann hoch, bis zum Bootstrap Classloader.
Wenn der Bootstrap die Klasse Y nicht laden kann, geht es den Pfad wieder runter, bis der Classloader wieder an der Reihe ist, der X geladen hat.
Wird auch er nicht fündig, kann die Klasse nicht geladen werden. Dieser Mechanismus dient dazu, das du keine JRE Klassen durch eigene Klassen ersetzen kannst.
Für nähere Informationen, schau dir die JLS an.
http://java.sun.com/docs/books/jls/
 
G

Guest

Gast
Hui,
besten dank für die super antwort. Aber eine frage hätte ich noch, wer bestimmt denn wie viele classLoader von der JVM verwendet werden?
 

Wildcard

Top Contributor
Zum einen die Implementierung der Klassenbibliothek, zum anderen die Anwendung selbst. Im Rahmen der Regeln (immer zuerst beim Parent Classloader anfragen), kannst du beliebige Classloader verwenden. Du kannst zum Beispiel Classloader schreiben, die Klassen aus Datenbanken, oder dem Internet nachladen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
S Operatoren i=i++; Was passiert hier? Java Basics - Anfänger-Themen 21
N Enum Typen, was passiert intern mit ihnen? Java Basics - Anfänger-Themen 2
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
S Unklarer Code (was passiert hier?) Java Basics - Anfänger-Themen 1
T Kann mir jemand sagen, was bei folgender for-Schleife passiert? Java Basics - Anfänger-Themen 1
V Was passiert in dem Programm? Java Basics - Anfänger-Themen 3
B Was passiert in dieser Methode? Java Basics - Anfänger-Themen 3
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
T boolean, was passiert hier? Java Basics - Anfänger-Themen 4
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
B Nichts passiert... Java Basics - Anfänger-Themen 4
C Klassen BubbleSort was passiert mit dem Index ? Java Basics - Anfänger-Themen 2
J Was passiert hier? Java Basics - Anfänger-Themen 6
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
F festlegen, was beim schließen des fensters passiert Java Basics - Anfänger-Themen 12
E DeSerialize von verändertem Object, was passiert? Java Basics - Anfänger-Themen 4
-horn- Was passiert, wenn Zähler über Integer Max läuft? Java Basics - Anfänger-Themen 9
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
R Deklaration: was passiert da? Java Basics - Anfänger-Themen 3
M 2 Fragen: Vergleich, aber wie? Was passiert in diesem Teil? Java Basics - Anfänger-Themen 18
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G pow(double,double) was passiert bei pow(double,int) Java Basics - Anfänger-Themen 6
M Migration JUnit 3.8 -> 4.0, was passiert mit Testsuites? Java Basics - Anfänger-Themen 3
N design time vs build time vs compile time Java Basics - Anfänger-Themen 2
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
A Compile the Source File into a .class File Java Basics - Anfänger-Themen 3
M Compile Time Error - cannot find symbol (Objekt!) Java Basics - Anfänger-Themen 2
W OOP Compile Fehler Java Basics - Anfänger-Themen 4
A gcj Native Code compile Fehler Java Basics - Anfänger-Themen 5
L wo muß die Jar stehen, Netbeans, Compile Java Basics - Anfänger-Themen 3
S Compile zu etwas Ausführbarem Java Basics - Anfänger-Themen 4
J Wie Compile ich mit Eclipse Classic? Java Basics - Anfänger-Themen 17
Y compile error Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben