В чем разница между ошибкой во время выполнения и ошибкой компилятора?

В одном из моих профи слайдов по плойморфизму я вижу этот фрагмент кода с несколькими комментариями:

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

Как вы можете видеть, в первом заявлении о кастинге говорится, что он приведет к ошибке во время выполнения, а в другой говорит, что это приведет к ошибке компилятора.

Что делает эти ошибки? и как они отличаются друг от друга?

Ответ 1

Ошибка времени выполнения будет возникать только тогда, когда код действительно запущен. Это наиболее сложно - и привести к сбоям программы и ошибкам в вашем коде, которые трудно отследить.

В примере может потребоваться преобразовать строку: "hello" в целое число:

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

Компилятор может не рассматривать это как проблему, но при запуске будет выведена ошибка.

Ошибки компилятора связаны с неточностями в коде, где компилятор выдает ошибку, чтобы предупредить вас о том, что не будет компилироваться и, следовательно, не может быть запущено.

Пример ошибки компилятора:

int = "this is not an int";

Надеюсь, что это поможет.

Ответ 2

Ошибка во время выполнения во время работы программы. Ошибка компилятора возникает при попытке скомпилировать код.

Если вы не можете скомпилировать свой код, это ошибка компилятора.

Если вы компилируете и запускаете свой код, но затем он не выполняется во время выполнения, это время выполнения.

Ответ 3

Ошибки времени компиляции относятся к синтаксису и семантике. Например, если вы выполняете операции с различными типами. Пример: добавление строки с int или деление строки на реальный. (прочитайте последний параграф!)

Ошибки времени выполнения - это те, которые обнаруживаются при выполнении программы. Например, деление на ноль. Компилятор не может знать, приведет ли операция x/a-b к делению на ноль до выполнения.

Это очень широкое объяснение. Существует много интеллектуальных компиляторов, а также возможность внутреннего кастинга между различными типами, что приводит к операциям, которые имеют смысл. Это возможно для предварительного компиляции кода и просмотра некоторых ошибок времени выполнения, даже если код не выполняется.

См. также эту ссылку: Время выполнения и время компиляции

Ответ 4

Ошибка компиляции означает, что компилятор знает, что discountVariable = saleVariable должен быть завершен с помощью двоеточия ниже discountVariable = saleVariable;, поэтому он будет вызывать ошибку при компиляции кода.

Ошибка времени выполнения означает, что ошибка будет возникать во время выполнения, потому что, даже если вы производите продажуVariable в discountVariable, бросок не может принимать, поскольку они различаются по типу.

Ответ 5

Ошибки времени компиляции - это ошибки синтаксиса и семантики.

Ошибки времени выполнения являются ошибками логики в первую очередь. Из-за чего-то, о котором забыл программист, программа вылетает, например. деление на 0, обращение к переменной без инициализации первой и т.д.

Ответ 6

Потому что компилятор не знает тип объекта "saleVariable", пока это значение не было установлено, когда программа запущена.

Вы заставляете все, что есть в salesVariable, в тип DiscountSale, это считается небезопасным и не может быть оценено до времени выполнения.

Ответ 7

Думаю, у вас уже есть общий смысл того, в чем разница. В частности, в коде, который вы указали в OP,

  • Во втором утверждении компилятор сравнивает типы на LHS и RHS и не обнаруживает, что имплицитное применение невозможно, поэтому оно дает ошибку.
  • первый оператор рассматривается как один и тот же, но здесь программист явно использует тип, который так же хорош, как компилятор, что я знаю, что я делаю, и, конечно, компилятор доверяет вам и не дает вам никаких ошибок.

Ответ 8

Если вы используете Google, вы получите следующее:

Ошибка времени компиляции - это любой тип ошибки, который предотвращает компиляцию java-программы как синтаксическая ошибка, не найденный класс, неправильное имя файла для определенного класса, возможная потеря точности при смешивании разных типов данных Java и и так далее.

Ошибка времени выполнения означает ошибку, которая происходит, когда программа запущена. Чтобы справиться с такими ошибками, java определит Исключения. Исключения представляют собой объекты, представляющие собой ненормальное условие в потоке программы. Он может быть установлен или не установлен.

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

Ответ 9

Ошибки компилятора связаны с неточностями в коде, где компилятор выдает ошибку, чтобы предупредить вас о том, что не будет компилироваться и, следовательно, не может быть запущено.

Пример: - Метод загрузки

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
    }
}

Ошибки времени выполнения - это те, которые обнаруживаются при выполнении программы. Например, деление на ноль. Компилятор не может знать, приведет ли операция x/a-b к делению на ноль до выполнения

Ответ 10

Компиляция/время компиляции/синтаксис/семантические ошибки: Ошибки компиляции или компиляции возникают из-за ошибки ввода, если мы не следуем правильному синтаксису и семантике любого языка программирования, тогда компилируем время ошибки генерируются компилятором. Они не позволят вашей программе выполнять одну строку до тех пор, пока вы не удалите все синтаксические ошибки или пока не будете отлаживать ошибки времени компиляции.
Пример: Отсутствие точки с запятой в C или опечатки int как int.

Ошибки времени выполнения: Ошибки времени выполнения - это ошибки, возникающие при запуске программы. Эти типы ошибок приведут к тому, что ваша программа будет вести себя непредсказуемо или даже может убить вашу программу. Их часто называют исключениями.
Пример: предположим, что вы читаете файл, который не существует, приведет к ошибке выполнения.

Подробнее о ошибки программирования здесь