In einer meiner prof-Folien zum Thema Ploymorphismus sehe ich diesen Code mit einigen Kommentaren:
discountVariable = //will produce
(DiscountSale)saleVariable;//run-time error
discountVariable = saleVariable //will produce
//compiler error
Wie Sie sehen, heißt es in der ersten Casting-Anweisung, dass sie einen run-time -Fehler erzeugt, und in der anderen gibt es einen Compiler-Fehler an.
Was macht diese Fehler? und wie unterscheiden sie sich?
Ein Laufzeitfehler tritt nur dann auf, wenn der Code tatsächlich ausgeführt wird .. Diese sind am schwierigsten - und führen zu Programmabstürzen und Fehlern in Ihrem Code, die möglicherweise schwer zu finden sind.
Ein Beispiel könnte der Versuch sein, einen String: "Hallo" in eine Ganzzahl zu konvertieren:
string helloWorld = "hello";
int willThrowRuntimeError = Convert.ToInt32(helloWorld);
Der Compiler sieht dies möglicherweise nicht als Problem an, aber beim Ausführen wird ein Fehler ausgegeben.
Compiler-Fehler sind auf Ungenauigkeiten im Code zurückzuführen. Der Compiler gibt einen Fehler aus, um Sie auf etwas aufmerksam zu machen, das nicht kompiliert werden kann, und kann daher nicht ausgeführt werden.
Ein Beispiel für einen Compiler-Fehler wäre:
int = "this is not an int";
Hoffentlich hilft das.
Während der Ausführung des Programms tritt ein Laufzeitfehler auf. Ein Compiler-Fehler tritt auf, wenn Sie versuchen, den Code zu kompilieren.
Wenn Sie Ihren Code nicht kompilieren können, handelt es sich um einen Compiler-Fehler.
Wenn Sie Ihren Code kompilieren und ausführen, schlägt er jedoch während der Ausführung fehl, das ist die Laufzeit.
Kompilierzeitfehler bezieht sich auf Syntax und Semantik. Zum Beispiel, wenn Sie Vorgänge ausführen, die unterschiedliche Typen betreffen. Beispiel: Hinzufügen eines Strings mit einem int oder Teilen eines Strings durch einen Real. (lies den letzten Absatz du !!!)
Laufzeitfehler werden bei Ausführung des Programms erkannt. Zum Beispiel Division durch Null. Der Compiler kann nicht wissen, ob die Operation x/a-b bis zur Ausführung zur Division durch Null führt.
Dies ist eine sehr breite Erklärung. Es gibt viele intelligente Compiler, und es ist auch möglich, interne Castings zwischen verschiedenen Typen auszuführen, was zu sinnvollen Operationen führt. Es ist möglich, Code vorab zu kompilieren und Laufzeitfehler anzuzeigen, auch wenn der Code nicht ausgeführt wird.
Siehe auch diesen Link: Runtime vs Compile Time
Fehler bei der Kompilierungszeit bedeutet, dass der Compiler weiß, dass discountVariable = saleVariable
mit einem Semikolon abgeschlossen sein muss, da unter discountVariable = saleVariable;
so ein Fehler beim Kompilieren des Codes ausgegeben wird.
Laufzeitfehler bedeutet, dass der Fehler zur Laufzeit auftritt, denn obwohl CastevariableVariable in DiscountVariable umgewandelt wird, kann die Besetzung nicht ausgeführt werden, da sie sich im Typ unterscheiden.
Fehler beim Kompilieren sind Syntax- und Semantikfehler.
Laufzeitfehler sind in erster Linie Logikfehler. Aufgrund von etwas, das der Programmierer übersehen hat, stürzt das Programm ab, z. Division durch 0, Zugriff auf eine Variable ohne vorheriges Initialisieren usw.
ich glaube, Sie haben bereits die allgemeine Beschreibung des Unterschieds. Speziell in dem Code, den Sie im OP angezeigt haben,
Wenn Sie Google verwenden, erhalten Sie Folgendes:
Fehler beim Kompilieren ist ein Fehler, der ein Kompilieren eines Java-Programms verhindert, beispielsweise einen Syntaxfehler, eine nicht gefundene Klasse, einen ungültigen Dateinamen für die definierte Klasse, einen möglichen Genauigkeitsverlust beim Mischen verschiedener Java-Datentypen usw.
Ein Laufzeitfehler bedeutet einen Fehler, der auftritt, während das Programm ausgeführt wird. Um mit dieser Art von Fehlern fertig zu werden, definieren Java Ausnahmen. Ausnahmen sind Objekte, die einen anormalen Zustand im Programmablauf darstellen. Es kann entweder aktiviert oder deaktiviert sein.
http://wiki.answers.com/Q/Difference_between_run_time_error_and_compile_time_error_in_Java
Dies liegt daran, dass der Compiler den Objekttyp "saleVariable" nicht kennt, bis dieser Wert tatsächlich eingestellt wurde, wenn das Programm ausgeführt wird.
Sie zwingen, was auch immer in salesVariable enthalten ist, in den Typ DiscountSale. Dies wird als unsicher angesehen und kann erst zur Laufzeit ausgewertet werden.
Compiler-Fehler sind auf Ungenauigkeiten im Code zurückzuführen. Der Compiler gibt einen Fehler aus, um Sie auf etwas aufmerksam zu machen, das nicht kompiliert werden kann, und kann daher nicht ausgeführt werden.
Bsp: - 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
}
}
Laufzeitfehler sind Fehler, die bei der Ausführung des Programms erkannt werden. Zum Beispiel Division durch Null. Der Compiler kann nicht wissen, ob die Operation x/a-b bis zur Ausführung zur Division durch Null führt
Compilation/Kompilierzeit/Syntax/Semantische Fehler: Kompilierungs- oder Kompilierzeitfehler sind auf Grund von Tippfehlern aufgetreten. Wenn wir nicht der korrekten Syntax und Semantik einer Programmiersprache folgen, werden Compilierfehler vom Compiler ausgelöst . Sie lassen nicht zu, dass Ihr Programm eine einzige Zeile ausführt, bis Sie alle Syntaxfehler entfernen oder die Kompilierzeitfehler debuggen.
Beispiel: Ein Semikolon in C fehlt oder int
als Int
falsch eingegeben wird.
Laufzeitfehler: Laufzeitfehler sind die Fehler, die generiert werden, wenn das Programm ausgeführt wird. Diese Art von Fehlern führt dazu, dass sich Ihr Programm unerwartet verhält oder das Programm sogar abbricht. Sie werden oft als Ausnahmen bezeichnet.
Beispiel: Angenommen, Sie lesen eine Datei, die nicht vorhanden ist. Dies führt zu einem Laufzeitfehler.
Lesen Sie mehr über alle Programmierfehler hier