2012-02-27 1 views
29

In una delle mie diapositive prof su ploymorphism, vedo questo pezzo di codice con un paio di commenti:Qual è la differenza tra errore di run-time e errore del compilatore?

discountVariable =    //will produce 
    (DiscountSale)saleVariable;//run-time error 
discountVariable = saleVariable //will produce 
           //compiler error 

Come si può vedere, si dice nella prima dichiarazione di colata che esso produrrà run- tempo errore e nell'altro si dice che produrrà errore del compilatore.

Che cosa rende questi errori? e in che modo differiscono l'uno dall'altro?

+28

Forza ragazzi. Il ragazzo sta cercando di imparare, i downvotes non sono necessari. – JohnFx

+4

Non importa se ha indirizzato il mio esempio o no, ciò che conta davvero è che ho ottenuto la risposta chiaramente. Quel ragazzo lo ha spiegato in un modo semplice che può essere facile da capire per un programmatore ingenuo come me. – AbdullahR

+0

Hai letto http://stackoverflow.com/faq? –

risposta

33

Una corsa si verifica solo quando il codice è effettivamente in esecuzione. Questi sono i più difficili - e portano a crash del programma e bug nel codice che possono essere difficili da rintracciare.

Un esempio che si stia tentando di convertire una stringa: "ciao" in un numero intero:

string helloWorld = "hello"; 
int willThrowRuntimeError = Convert.ToInt32(helloWorld); 

Il compilatore può non vedere questo come un problema, ma quando viene eseguito saranno gettati un errore.

Gli errori del compilatore sono dovuti a inesattezze nel codice, in cui il compilatore genera un errore per avvisare di qualcosa che non verrà compilato e pertanto non può essere eseguito.

Un esempio di un errore di compilazione sarebbe:

int = "this is not an int"; 

Speranza che aiuta.

0

Se devi usare Google, si otterrebbe in questo modo:

errore di tempo

Compile è un qualsiasi tipo di errore che impediscono un programma Java compilato come un errore di sintassi, una classe non trovata, un file danneggiato nome per la classe definita, una possibile perdita di precisione quando si mescolano diversi tipi di dati java e così via.

Un errore di runtime indica un errore che si verifica mentre il programma è in esecuzione. Per gestire questo tipo di errori, java definisce le eccezioni. Le eccezioni sono oggetti che rappresentano una condizione anormale nel flusso del programma. Può essere selezionato o deselezionato.

http://wiki.answers.com/Q/Difference_between_run_time_error_and_compile_time_error_in_java

+2

-1 Non ha usato Google - ha chiesto qui. Almeno legare il testo incollato nel suo esempio. –

+0

Ora usando i collegamenti Google a questo ... haha ​​ –

11

Un errore di runtime avviene durante l'esecuzione del programma. Un errore del compilatore si verifica quando si tenta di compilare il codice.

Se non si è in grado di compilare il codice, si tratta di un errore del compilatore.

Se si compila ed esegue il codice, ma non riesce durante l'esecuzione, questo è runtime.

+1

Nel tuo esempio, 'discountVariable' è di tipo dichiarato' DiscountSale' e 'saleVariable' è di un altro tipo. Quando si tenta di assegnare il valore di uno all'altro con la riga 'discountVariable = saleVariable', ciò provoca un errore del compilatore. Se metti il ​​cast '(DiscountSale)', questo dice al compilatore che va bene. Quindi si interrompe quando viene eseguito perché 'saleVariable' non è in realtà del tipo' DiscountSale'. –

+1

+1 perché questa è la risposta più semplice alla domanda: Qual è la differenza tra un errore di runtime e un errore del compilatore? Sarei molto più felice se la risposta fosse effettivamente indirizzata all'esempio specifico offerto dall'OP, comunque. –

1

È perché il compilatore non conosce il tipo di oggetto "saleVariable" finché tale valore non è stato effettivamente impostato quando il programma è in esecuzione.

Si sta forzando ciò che è in salesVariable nel tipo DiscountSale, questo è considerato non sicuro e non può essere valutato fino al runtime.

+0

Non un +1 perché "il compilatore non conosce il tipo di oggetto di venditaVariabile". Non è vero. Il compilatore conosce il tipo: è incomparabile con DiscountSale. –

+0

Vostro diritto, stavo proprio pensando a esso nel contesto di se stava facendo qualcosa come e.DataItem – bigamil

2

Errore di tempo di compilazione significa che il compilatore sa che discountVariable = saleVariable deve terminare con un punto e virgola come sotto discountVariable = saleVariable; in modo da generare un errore durante la compilazione del codice.

Errore tempo di esecuzione indica che si verificherà l'errore in fase di esecuzione, perché anche se si esegue il cast di venditaVariabile in discountVariable, il cast non può essere eseguito perché differiscono nel tipo.

5

Errori del tempo di compilazione si riferisce alla sintassi e alla semantica. Ad esempio, se esegui operazioni che coinvolgono tipi diversi. Es: aggiungendo una stringa con un int, o dividendo una stringa da un reale. (leggi l'ultimo paragrafo !!!)

Gli errori di tempo di esecuzione sono quelli rilevati durante l'esecuzione del programma. Ad esempio, divisione per zero. Il compilatore non può sapere se l'operazione x/a-b porterà alla divisione per zero fino all'esecuzione.

Questa è una spiegazione molto ampia. Esistono molti compilatori intelligenti e, inoltre, è possibile eseguire il cast interno tra diversi tipi che porta a operazioni che hanno senso.È possibile precompilare il codice e vedere alcuni errori di esecuzione anche se il codice non viene eseguito.

fare riferimento a questo link troppo: errore di tempo Runtime vs Compile time

1

pensa di avere già la descrizione generale di quale sia la differenza. Specificamente nel codice che hai mostrato nell'OP,

  • Nella seconda istruzione, il compilatore confronta i tipi su LHS e RHS e non trova alcuna trasmissione implicita possibile, quindi fornisce l'errore.
  • la prima istruzione è vista dal compilatore come la stessa, ma qui il programmatore esegue esplicitamente il tipo, il che equivale a dire al compilatore che so cosa sto facendo e ovviamente il compilatore si fida di te e non ti dà errori.
+0

+1 in ritardo alla festa, ma questo è utile –

0

Gli errori del compilatore sono dovuti a inesattezze nel codice, in cui il compilatore genera un errore per avvisare di qualcosa che non verrà compilato e pertanto non può essere eseguito.

Es: - MethodOverloading

class OverloadingTest { 
    void sum(int a, long b) { 
     System.out.println("a method invoked"); 
    } 

    void sum(long a, int b) { 
     System.out.println("b method invoked"); 
    } 

    public static void main(String args[]) { 
     OverloadingTest obj = new OverloadingTest(); 
     obj.sum(200, 200);// now ambiguity 
    } 
} 

tempo di esecuzione gli errori sono quelli che vengono rilevati quando il programma esegue. Ad esempio, divisione per zero. Il compilatore non può sapere se l'operazione x/ab volontà conduce alla divisione per zero fino all'esecuzione

0

compilazione/tempo di compilazione/sintassi/errori di semantica: compilazione o compilazione errori di tempo sono verificati errori a causa di errore di scrittura, se non seguiamo la sintassi e la semantica corrette di alcun linguaggio di programmazione, quindi gli errori di tempo di compilazione vengono lanciati dal compilatore. Non permetteranno al tuo programma di eseguire una singola riga finché non rimuovi tutti gli errori di sintassi o finché non esegui il debug degli errori di compilazione.
Esempio: Manca un punto e virgola in C o un errore di digitazione int come Int.

Errori di runtime: Gli errori di runtime sono gli errori generati quando il programma è in esecuzione. Questi tipi di errori causeranno un comportamento imprevisto del programma o addirittura la possibilità di uccidere il programma. Sono spesso indicati come eccezioni.
Esempio: Supponiamo che stai leggendo un file che non esiste, comporterà un errore di runtime.

Leggi tutto su tutto programming errors qui

2

errori di compilazione sono errori di sintassi e semantica.

Gli errori di runtime sono principalmente errori di logica. A causa di qualcosa che il programmatore ha trascurato, il programma si blocca, ad es. divisione per 0, accesso a una variabile senza inizializzarlo prima ecc.