2016-04-15 6 views
0

Ich bin neu in Java-Programmierung.Dynamische Verknüpfung in C/C++ (dll) vs JAVA (JAR)

Grundsätzlich, wenn wir in C/C++ - Programmierung arbeiten, erstellen wir DLL-Dateien mit .h und .c-Dateien, wobei .h-Datei Deklarationen enthält und .c-Datei enthält Definitionen dieser Klassen, Funktionen. Wenn wir diese Funktionalitäten der erstellten DLL-Datei in einem anderen Projekt verwenden möchten, enthalten wir .h in Präprozessor-Deklaration, um Compiler über Deklarationen von Variablen, Funktionen zu informieren, und wir bieten entsprechende DLL-Pfad während der Kompilierung, so dass Linkerstufe kommuniziert DLL.

Hier ist meine Frage, wie sie dies in Java-Programmierung verwalten, da es keine Header-Dateien enthält. es hat nur .java-Dateien, wo diese Dateien kombiniert und JAR-Datei erstellt.Wenn ich diese JAR-Datei in einem anderen Projekt verwenden möchten, verwenden wir "Paket" oder "importieren" Schlüsselwort, aber wenn es sagt Import-Datei wird mit Logik importiert und Wie verwaltet der Linker den Kompilierungsschritt?

+0

Sie haben das ziemlich falsch für C/C++: Der Linker kümmert sich überhaupt nicht um die DLL. Es benötigt eine Importbibliothek (LIB), um Symbole aufzulösen. Die Antwort für Java ist jedoch ziemlich einfach: Alle Typinformationen sind in der JAR-Datei enthalten, ähnlich wie bei .NET-Assemblys. – IInspectable

+0

jar ist Archiv, etwas wie zip, Sie können die Java-Klassen-Dateien daraus extrahieren. – SHR

+0

@KerrekSB Ich vermute, ich habe das mit meinem Passwort gemacht. o_O –

Antwort

3

Wie verwalten sie dies in Java-Programmierung, weil es keine Header-Dateien enthält.

Es schafft dies, indem er alle Informationen Platzierung es zum Kompilieren gegen die Klasse benötigt und zur Laufzeit (und möglicherweise das Debuggen) in der .class Datei, so dass keine Notwendigkeit für zusätzliche Informationen gibt.

Oft ist die Quelle und javadoc sind in JAR-Dateien als auch (manchmal die gleiche JAR)

gestellt, wenn ich diese JAR-Datei in einem anderen Projekt verwenden wollen wir „Paket“ oder „Import“ Stichwort

verwenden

Sie müssen nicht. Dies ist nur eine kurze Hand. Sie können volle package.ClassName verwenden und es ist kein import erforderlich. Hinweis: Dies importiert keinen Code oder Daten, sondern ermöglicht Ihnen, einen kürzeren Namen für die Klasse zu verwenden.

z.B. gibt es keinen Unterschied zwischen

java.util.Date date = new java.util.Date(); 

und

import java.util.Date(); 

Date date = new Date(); // don't need to specify the full package name. 

wenn sagt, es Import gesamte Datei mit Logik importiert wird

Es gibt keine Möglichkeit, noch keine Notwendigkeit, dies zu tun . Es gibt nichts wie #include zum Beispiel, und inlining tritt erst zur Laufzeit, die Zeit nicht kompiliert werden (außer Konstanten bei der Kompilierung bekannt)

wie Linker bei der Kompilierung Schritt verwalten tun

Die Verknüpfung und das Kompilieren zu nativem Code wird zur Laufzeit ausgeführt. Der Compiler javac prüft die Gültigkeit Ihres Codes und generiert Bytecode für die JVM zum Lesen.

1
  1. Moderne Sprachen, Java (& C#) keinen Unterschied zwischen Erklärung und Definition machen, so das Konzept der .H-Datei wird in dieser Sprache verschwunden.

  2. In vielen Aspekten (neue Sprachen) ist die Dualism-Kompilierzeit vs. Laufzeit verloren (hauptsächlich weil sie eine starke Reflexion haben). Java-Klassen oder JARs (oder C# -Assemblies) enthalten Informationen, die zum Kompilieren erforderlich sind (gleichartige Deklarationen). Java-Umgebung benötigt keine speziellen 'Dateien zum Kompilieren'. Das gleiche JAR ist ‚kompilieren Datei‘ und ‚Laufzeit binären dll‘

Typische C Denken mit .H, .C, LIB-Dateien gehen an Nische (IMHO - ich bin alt C-Programmierer und ich fühle mich gut mit neuen Sprachen)