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?
risposta
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.
Dunque, significa una compilation di successo senza errori? – user55924
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
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).
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 –
pacchetto senza nome sarebbe veramente vuoto anche se ... – TofuBeer
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.
Javac avvia e controlla la dimensione del file e se è zero, restituisce semplicemente senza creare alcun file .class.
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.
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
.
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
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'
mentre vero, fallire l'esecuzione non era la domanda, era :-) – kleopatra
Java non creerà il file di classe di quel file java. Perché prima cercherà il nome della classe. Quindi non accadrà nulla
- 1. Cosa succede se chiamo jQuery.post() con un url vuoto?
- 2. Cosa succede se si monta su un punto di montaggio non vuoto con un fusibile?
- 3. Cosa succede se nuovo fallisce?
- 4. Cosa succede se si interrompe un push Git?
- 5. Come si compila un file java con dipendenze jar?
- 6. Cosa succede se un costruttore lancia un'eccezione?
- 7. Cosa succede se un finalizzatore rende un oggetto raggiungibile?
- 8. Il comando .. interruzione; in Java cosa succede se.?
- 9. Cosa succede se non si chiama mai Socket.EndConnect?
- 10. Cosa succede se non si ripristina una transazione in Hibernate?
- 11. Cosa succede se si lancia un'eccezione dall'interno di UncaughtExceptionHandler?
- 12. Cosa succede se non implemento Serializable quando si utilizza Hashmap
- 13. Cosa succede se implemento una classe nel file di intestazione?
- 14. Cosa succede se un'operazione di TableBatchOperation fallisce?
- 15. Cosa succede se JWT viene rubato?
- 16. cosa succede veramente quando si passano oggetti in java?
- 17. Cosa succede se I ReleaseMutex() due volte?
- 18. Cosa succede se Zookeeper fallisce completamente?
- 19. Cosa succede quando si modifica direttamente Gemfile.lock?
- 20. Cosa succede se call_user_func deve restituire false?
- 21. Cosa succede se non chiudi un filehandle in Perl?
- 22. Cosa succede se chiudi una connessione chiusa?
- 23. Cosa succede se un oggetto ridimensiona il proprio contenitore?
- 24. cosa succede quando si verificano due eccezioni?
- 25. Cosa succede se voglio memorizzare un valore None nel memcache?
- 26. Cosa succede se un costruttore di shared_ptr non riesce?
- 27. Cosa succede quando si usa make_shared
- 28. Cosa succede se si rimuove lo spazio tra gli operatori + e ++?
- 29. Golang se/o non si compila
- 30. Cosa succede con Java "% n" in printf?
Sembra che tu abbia risposto alla tua stessa domanda. Se vuoi sapere * perché * è successo, questa è una domanda diversa. – MatrixFrog
Ho chiesto perché anche io penso. – GuruKulki
Questo è ciò che accade, se (javaFileContent.indexOf ("classe") <- 1) restituisce null; :) Sto scherzando, ovviamente, – medopal