Wenn ich eine leere Java-Datei kompilierte, erzeugte es keine Klassendatei. Ich wollte also wissen, wie der Compiler beim Kompilieren einer leeren Java-Datei reagiert. Es sollte eine leere Klassendatei in diesem erzeugt haben, warum nicht?Was passiert, wenn Sie eine leere Java-Datei kompilieren?
Antwort
javac
startet, sieht, dass in der Datei keine Klasse deklariert ist und endet. Damit eine .class
Datei erstellt werden kann, müssen Sie mindestens die Klassendeklaration in der Datei haben.
Also bedeutet es eine erfolgreiche Kompilierung ohne Fehler? – user55924
Wenn die Datei vollständig leer ist und nur .java aufgerufen wird, muss der Compiler nichts tun, wenn Sie versuchen, eine Klassendatei zu generieren. Wenn Sie tun, um eine
class Foo {
}
Segment in der .java-Datei dann eine leere calss Datei (Foo.class) wird
Well gegeben erzeugt werden, dass eine Java-Datei wie folgt sein könnte:
// Foo.java
class Bar
{
}
Wie würde es wissen, was man das Ding nennen soll? Auch sollte es eine Klasse oder eine Schnittstelle oder ein enum machen?
Anstatt die Wahl für Sie treffen, tut es nichts (ich hätte selbst einen Fehler erwartet ... aber nichts ist auch eine gesunde Sache zu tun).
Beinahe leere .java-Dateien werden für Paketanmerkungen verwendet. Wenn Sie also nichts mit einer leeren Quelldatei machen, ist es etwas sinnvoller, sie als Fehler zu behandeln. Siehe http: //java.sun.com/docs/books/jls/drittes_edition/html/packages.html # 7.4.1.1 –
unbenanntes Paket wäre wirklich leer, aber ... – TofuBeer
Die meisten Antworten sagen tatsächlich, dass eine Klassendatei keine kompilierte Java-Datei ist, sondern eine binäre Darstellung einer Klasse. Die Kompilierung einer Java-Datei könnte zu zwei Klassendateien führen, wenn die Java-Datei zwei Klassen enthält (obwohl nur eine öffentlich sein kann), und deshalb führt das Kompilieren von etwas mit Null-Klassen zu null Klassendateien.
Javac startet und überprüft die Größe der Datei und wenn sie Null ist, kehrt sie einfach zurück, ohne eine .class-Datei zu erzeugen.
javac erstellt eine Klassendatei für jede Klassendeklaration (explizit oder anonym). Da Ihre Java-Datei keine enthielt, generierte der Compiler mit Recht keine Klassendateien.
Wenn Sie die Klasse deklariert hätten (z. B. public class test{ }
), würde sie kompilieren und test.class
-Datei erstellen. Es würde nicht laufen, es hat keine main
Methode.
Es ist tatsächlich möglich, (zumindest mit OpenJDK 1.6) eine leere Datei zu erstellen und zu kompilieren, aber: 1. es wird keine '.class' Datei erzeugt und 2. es werden keine Warnungen erzeugt. – rbrito
Klasse Emptyclass { }
// Emptyclass erfolgreich kompiliert werden kann und .class-Datei wird auch erzeugt, aber während der Ausführung scheitert es, weil JVM finden doesnot 'Main-Methode' in der Klasse 'Emptyclass'
während wahr, fehlschlagende Ausführung war nicht die Frage, war es :-) – kleopatra
Java wird keine Klassendatei dieser Java-Datei erstellen. Weil zuerst nach dem Klassennamen gesucht wird. So wird nichts passieren
- 1. Was passiert, wenn Sie eine leere Zeichenfolge an einen Aufruf von Java enum .valueOf übergeben?
- 2. Was passiert, wenn veröffentlicht
- 3. Was passiert, wenn ich eine Ausnahme erstelle?
- 4. Was passiert, wenn make_shared
- 5. Was passiert, wenn wir eine Webseite aktualisieren?
- 6. Was passiert, wenn Sie Socket.EndConnect nie aufrufen?
- 7. Was passiert, wenn Sie ein Programm ausführen?
- 8. Was passiert, wenn Sie ng serve ausführen?
- 9. Was passiert, wenn eine JSP Ausführung beendet?
- 10. Was passiert, wenn ich eine AliasProperty anbinde?
- 11. Was passiert, wenn eine App übersendet wird?
- 12. Was passiert, wenn Sie eine geschlossene Verbindung schließen?
- 13. Was passiert, wenn Sie eine SqlConnection vor dem SqlDataReader schließen?
- 14. Was passiert, wenn Sie eine speicherprogrammierbare ausführbare Datei überschreiben?
- 15. Was passiert, wenn Sie eine Variable an einige Daten binden?
- 16. Was passiert, wenn Sie eine Zufallszahl-Engine und Zufallszahlenverteilung kopieren?
- 17. Was passiert, wenn Sie einer rvalue-Referenz eine Literalkonstante zuweisen?
- 18. Was passiert, wenn Sie eine lang andauernde Alter-Abfrage beenden?
- 19. Was passiert, wenn Sie eine URL in den Browser eingeben
- 20. was genau passiert, wenn `enableProdMode()`
- 21. Was passiert eigentlich, wenn ApplicationCommands.Close
- 22. Was passiert, wenn update_all fehlschlägt?
- 23. Was passiert, wenn Kernel delayed_work
- 24. Was passiert, wenn NSTimer in
- 25. Was passiert, wenn mehr als eine .cpp-Datei # enthalten ist?
- 26. Was passiert, wenn Öffnen fehlschlägt?
- 27. Was passiert, wenn php.ini fehlt?
- 28. Was passiert, wenn kfree Funktion
- 29. Was kann ich gewinnen, wenn ich eine leere Schnittstelle implementiere?
- 30. Was macht eine Methode, wenn sie auf eine leere Aufgabe wartet?
Klingt wie Sie Ihre eigene Frage beantwortet. Wenn du wissen willst * warum * es passiert ist, ist das eine andere Frage. – MatrixFrog
Ich fragte Warum ich auch denke. – GuruKulki
Das passiert, wenn (javaFileContent.indexOf ("class") <- 1) null zurückgibt; :) Ich scherze natürlich – medopal