link 2 class
-
nehmen wir an ich definiere eine class zwar ohne main()
public class SampleClass { ... }
die Klasse speichere ich unter SampleClass.java
dann definiere ich noch eine class mit main()public class Invoker { public static void main(String[] args) { SampleClass myClass = new SampleClass(); } }
die speichere ich unter Invoker.java
jetzt sind aber beide Klassen voneinander getrennt. Klass Invoker weisst doch nichts von Klass SampleClass, deswegen
SampleClass myClass = new SampleClass();
bekomme ich einen Fehler?
-
wenn ich unter c++ wär, muss ich halt die Deklaration von SampleClass vor Class Invoker includieren. etwar #include "./SampleClass.hpp"
-
netrobot schrieb:
bekomme ich einen Fehler?
Einen Fehler solltest du da nur bekommen, wenn die in unterschiedlichen Paketen sind. Was für ein Fehler kommt denn?
-
Sagen wir du hast im Verzeichnis test folgende zwei Java Quellcode Dateien:
//SampleClass.java public class SampleClass { public SampleClass() { System.out.println("SampleClass says hello"); } }
//Invoker.java public class Invoker { public static void main(String[] args) { SampleClass myClass = new SampleClass(); } }
Und jetzt gehst du kompilieren:
javac Invoker.java SampleClass.java
Dann werden class Dateien erstellt. Aufruf:
java Invoker
-
verstehe, das Schlüsselwort heisst "package". Ich nutze hiermit JCreator. Wenn ich die 2 Klassen in einem Package einpacken, dann funktionert das.
Allerdings habe ich noch eine Frage:
z.B. ich will eine Klasse von einem anderen Package benutzen, muss ich ganz am Anfang schreiben"package xxx".
Unter C++ habe ich 2 Möglichkeiten so was zu realisieren, statischer Linker od. dynamischer Linker, bei dem 2. Fall werden nicht aller Quellcodes kopiert, nur die, die ich zur Laufzeit benutze. Was ist mit "package xxx", werden alle Codes kopiert?
-
Allerdings habe ich noch eine Frage:
z.B. ich will eine Klasse von einem anderen Package benutzen, muss ich ganz am Anfang schreiben"package xxx". ]import myPackage.xxx;
-
import myPackage.xxx;
[/quote]
ich dachte "import" ist nur wegen namespace wieusing namespace xxx;
-
ich habe mit JCreator die folgende Projectstruktur erzeugt:
Workspace "Hello2Packages"
|
|-Hello2MainPackage (im eignen Verzeichnis)-
- HelloMain.java
|
|-Hello2PartPackage (im eignen Verzeichnis)-
- HelloPart.javaProblem ist in helloMain.java kennt der Compiler die in HelloPart.java definierte
Klasse nicht.
Wie löse ich das Problem?
Soll ich in HelloMain.java schreiben:
package Hello2MainPackage.*;
?
-
netrobot schrieb:
Unter C++ habe ich 2 Möglichkeiten so was zu realisieren, statischer Linker od. dynamischer Linker, bei dem 2. Fall werden nicht aller Quellcodes kopiert, nur die, die ich zur Laufzeit benutze. Was ist mit "package xxx", werden alle Codes kopiert?
Bei Java wird gar kein Code kopiert. Da geht es nur darum, dem Compiler zu sagen, wo sich der Code befindet.
-
mit anderem Wort, je weiter das Projekt verstreut, umso langsamer ist es.
-
Gregor@Home schrieb:
netrobot schrieb:
Unter C++ habe ich 2 Möglichkeiten so was zu realisieren, statischer Linker od. dynamischer Linker, bei dem 2. Fall werden nicht aller Quellcodes kopiert, nur die, die ich zur Laufzeit benutze. Was ist mit "package xxx", werden alle Codes kopiert?
Bei Java wird gar kein Code kopiert. Da geht es nur darum, dem Compiler zu sagen, wo sich der Code befindet.
was dann? holt der Compiler den Code vom Festplatt ab, wieviel ? den gesamten Code?(mehrere Klassen in einer Datei), od. nur eine bestimmte Klasse, die ich zur Laufzeit brauche?
-
Der Compiler nimmt jede ihm bekannte *.java-Datei und kompiliert sie in eine *.class-Datei. Dies wird einmalig auf deinem Rechner gemacht.
Die VM lädt die *.class-Dateien, wenn sie für das Programm benötigt werden. Dies geschieht stets beim Start eines Programmes, und auch während das Programm läuft.
Die Klassen müssen pro Programm nur einmal geladen werden. Da ein Programm normalerweise länger als eine Minute läuft, kannst du mögliche Geschwindigkeitsnachteile getrost vergessen.
-
wie importiere ich das Package, das sich in einem anderen Projekt befindet, aber in dem selben workspace