2010-03-18 11 views
7

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?

+2

Klingt wie Sie Ihre eigene Frage beantwortet. Wenn du wissen willst * warum * es passiert ist, ist das eine andere Frage. – MatrixFrog

+0

Ich fragte Warum ich auch denke. – GuruKulki

+0

Das passiert, wenn (javaFileContent.indexOf ("class") <- 1) null zurückgibt; :) Ich scherze natürlich – medopal

Antwort

14

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.

+0

Also bedeutet es eine erfolgreiche Kompilierung ohne Fehler? – user55924

1

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

2

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).

+0

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 –

+0

unbenanntes Paket wäre wirklich leer, aber ... – TofuBeer

6

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.

-1

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.

0

javac erstellt eine Klassendatei für jede Klassendeklaration (explizit oder anonym). Da Ihre Java-Datei keine enthielt, generierte der Compiler mit Recht keine Klassendateien.

1

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.

+0

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

1

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'

+0

während wahr, fehlschlagende Ausführung war nicht die Frage, war es :-) – kleopatra

0

Java wird keine Klassendatei dieser Java-Datei erstellen. Weil zuerst nach dem Klassennamen gesucht wird. So wird nichts passieren

Verwandte Themen