2012-12-26 5 views
5

In Java, usiamo System.exit(int) per uscire dal programma. Il motivo per un "valore di uscita" in C era che il valore di uscita era usato per verificare gli errori in un programma. Ma in Java, gli errori sono riflessi da un'eccezione generata, quindi possono essere gestiti facilmente. Quindi, perché abbiamo i valori di uscita in Java?Perché abbiamo codici di uscita in Java?

+8

Il valore di uscita è specificato per il sistema operativo. –

+5

Perché tutti i downvotes? – arshajii

+0

possiblity duplicate http://stackoverflow.com/q/457338/668970 – developer

risposta

13

i valori di uscita vengono restituiti al programma chiamante, ad es. il guscio. Un'eccezione non può essere rilevata da un programma esterno.

BTW Quando si lancia un'eccezione viene catturata da quella discussione o quella fili muore, i blocchi finally vengono comunque chiamati per quel thread. Quando si chiama System.exit(), tutti i thread si fermano immediatamente e infine i blocchi non vengono chiamati.

0

i valori di uscita vengono restituiti ai chiamanti per segnalare il completamento riuscito o non riuscito del programma. Il chiamante potrebbe non essere in grado di rilevare l'eccezione e gestirla di conseguenza.

Ad es. 0 valore di uscita significa completamento completato mentre valore di ritorno diverso da zero indica un errore nell'esecuzione.

Inoltre, System.exit() farà in modo che tutti i thread nell'applicazione si fermino in quel punto stesso.

3

Per lo stesso motivo.

I codici di uscita sono utilizzati esclusivamente da parti e applicazioni esterne al programma per scopi di debug e gestione. Una super-applicazione può sicuramente gestire un codice di ritorno migliore di cercare di analizzare una traccia dello stack.

Inoltre, se si sta creando un'applicazione per un utente finale, si preferirebbe uscire con garbo dalla propria app piuttosto che pubblicare una serie di informazioni di tracciamento dello stack, per un paio di motivi: uno, li starai semplicemente spaventando con un sacco di techno-gibberish pazzesco, e due, tracce di stack spesso rivelano informazioni sensibili e confidenziali sul modo in cui il programma è strutturato fondamentalmente (dando a un potenziale attaccante una maggiore conoscenza del sistema).

Per un esempio del mondo reale, stavo lavorando a un programma Java Batch che utilizzava i codici di uscita per i suoi lavori. Un utente può vedere se il lavoro è stato eseguito correttamente o meno in base al fatto che il codice di uscita fosse "0". Se era qualcos'altro, potevano contattare l'assistenza tecnica, armati con le informazioni aggiuntive del codice di uscita e l'help desk avrebbe tutte le informazioni necessarie basate su quel codice di uscita per aiutarli. Funziona molto meglio che cercare di chiedere ad un utente non tecnico, "Ok, quindi che cosa ottieni?"

0

In breve, i codici di uscita sono segnali semplificati per l'utente che incontra un'eccezione durante l'esecuzione di un programma Java. Dal momento che supponiamo che la maggior parte degli utenti non capisca i dati di traccia dello stack di un'eccezione, questi semplici codici personalizzati diversi da zero diranno loro che qualcosa non va e questo dovrebbe essere segnalato al fornitore. Quindi il venditore ottiene il codice e conosce la traccia dello stack associata a quel codice e tenta di riparare il sistema. Questa è un'astrazione fornita dai programmatori in modo che gli utenti non debbano leggere e riportare tracce di stack voluminose. Un'ottima analogia qui è il metodo getErrorCode() nella classe SQLException. Questo metodo chiude anche la JVM corrente in esecuzione sul computer client. Ciò implica che questo termina tutti i thread presenti nella JVM. Questo metodo chiama il metodo exit nella classe Java.lang.Runtime. Se vai alla documentazione di questo metodo, capirai come si spegne la macchina virtuale.

Questo è il legame http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29