Müssen Pakete nicht mit den Unterverzeichnissen übereinstimmen, in denen sich die Java-Datei befindet?

8

Ich habe heute Morgen ein paar Übungsprogramme für meine Java-Zertifizierung geschrieben und festgestellt, dass ich einen Paketnamen falsch eingegeben hatte, also nicht mit dem Unterverzeichnis der Java-Datei übereinstimmt. Ich habe den Code kompiliert, der einen Fehler erwartet, aber alles kompilierte Datei - nicht einmal eine Warnung.

Ich habe etwas gegoogelt und die meisten Seiten, die ich gelesen habe, sagten, dass der Paketname mit dem Unterverzeichnis übereinstimmen muss. Meine Erfahrung zeigt, dass das nicht der Fall ist.

Als ich versuchte, das Programm auszuführen, funktionierte es nicht, weil die .class-Datei im falschen Verzeichnis war. Ich habe es in das richtige Verzeichnis verschoben und habe folgende Fehlermeldung erhalten:

%Vor%

Ich glaube also, dass Java-Code kompiliert wird, wenn das Paket und das Unterverzeichnis nicht übereinstimmen, aber es scheint keinen Weg zu geben, den Code auszuführen wenn du das tust. Ist das richtig?

    
jonny five 29.11.2011, 12:15
quelle

1 Antwort

14

Der Paketname muss mit dem Verzeichnisnamen übereinstimmen, damit die class -Datei korrekt gefunden wird. Es hat nicht , den Verzeichnisnamen zum Kompilierungszeitpunkt für einige Compiler (z. B. javac) zu finden, obwohl andere (wie Eclipse) zumindest eine Warnung ausgeben.

Die "Möglichkeit, den Code auszuführen, wenn Sie das tun" besteht darin, die Verzeichnisstruktur zu erstellen und sie manuell dort einzutragen - die Klassendatei selbst ist vollständig gültig.

Beachten Sie, dass javac, wenn Sie das -d -Flag verwenden, die entsprechende Verzeichnishierarchie für Sie erstellen wird, unabhängig vom Quellverzeichnis. Zum Beispiel:

%Vor%

erstellt alle erforderlichen Verzeichnisse unter bin , um mit dem in ClassInPackage.java deklarierten Paket übereinzustimmen.

Wenn ich das alles gesagt habe, würde ich Ihnen nachdrücklich empfehlen, Sie dazu zu bringen, dass die Quellverzeichnisse mit den Paketen übereinstimmen, auch wenn Sie ohne es auskommen können:)

    
Jon Skeet 29.11.2011, 12:20
quelle

Tags und Links