2010-03-18 19 views
7

Quando ho compilato un file java vuoto, non ha prodotto alcun file di classe. Volevo sapere come reagisce il compilatore durante la compilazione di un file java vuoto. Dovrebbe aver generato un file di classe vuoto in questo, perché non lo ha fatto?Cosa succede se si compila un file java vuoto?

+2

Sembra che tu abbia risposto alla tua stessa domanda. Se vuoi sapere * perché * è successo, questa è una domanda diversa. – MatrixFrog

+0

Ho chiesto perché anche io penso. – GuruKulki

+0

Questo è ciò che accade, se (javaFileContent.indexOf ("classe") <- 1) restituisce null; :) Sto scherzando, ovviamente, – medopal

risposta

14

javac inizia, vede che non c'è una classe dichiarata nel file e finisce. Per creare un file .class, è necessario avere almeno la dichiarazione della classe nel file.

+0

Dunque, significa una compilation di successo senza errori? – user55924

1

Se il file è completamente vuoto e chiamato semplicemente .java, non vi è nulla da fare per il compilatore quando si tenta di generare un file di classe. Se si dispone di un segmento

class Foo { 
} 

nel file .java poi un file calss vuoto (Foo.class) verrà generato

2

Beh, dato che un file Java potrebbe essere simile a questo:

// Foo.java 
class Bar 
{ 
} 

Come saprebbe cosa chiamare la cosa? Inoltre dovrebbe renderlo una classe o un'interfaccia o un enum?

Piuttosto che fare la scelta per te, non fa nulla (mi sarei aspettato un errore da solo ... ma niente è una cosa sana da fare pure).

+0

I file java quasi vuoti vengono utilizzati per le annotazioni del pacchetto, quindi non fare nulla con un file sorgente vuoto ha più senso che trattarlo come un errore. Vedi http: //java.sun.com/docs/books/jls/third_edition/html/packages.html # 7.4.1.1 –

+0

pacchetto senza nome sarebbe veramente vuoto anche se ... – TofuBeer

6

Ciò che la maggior parte delle risposte sta dicendo è che un file di classe non è un file java compilato ma una rappresentazione binaria di una classe.

Compilare un file java può causare due file di classe se il file java contiene due classi (anche se solo uno può essere pubblico) ed è per questo che la compilazione di qualcosa con classi zero comporterà zero file di classe.

-1

Javac avvia e controlla la dimensione del file e se è zero, restituisce semplicemente senza creare alcun file .class.

0

javac crea un file di classe per ogni dichiarazione di classe (esplicita o anonima). poiché il file java non ne contiene nessuno, il compilatore non ha generato correttamente alcun file di classe.

1

Se avessi dichiarato la classe (ad esempio public class test{ }), compilerebbe e creerà il file test.class. Non funzionerebbe b'cos non ha un metodo main.

+0

In realtà è possibile creare (almeno con OpenJDK 1.6) un file vuoto e compilarlo, ma: 1. non genererà un file '.class' e 2. non genererà avvisi. – rbrito

1

class Emptyclass {}

// Emptyclass può essere compilato con successo e file .class viene anche generato, ma durante l'esecuzione non riesce, perché JVM doesnot trovare 'Metodo principale' della classe 'Emptyclass'

+0

mentre vero, fallire l'esecuzione non era la domanda, era :-) – kleopatra

0

Java non creerà il file di classe di quel file java. Perché prima cercherà il nome della classe. Quindi non accadrà nulla

Problemi correlati