- В чем разница между ошибкой во время выполнения и ошибкой компилятора? [Дубликат]
- 10 ответов
- Разница между ошибками времени компиляции и времени выполнения в Java
- Ошибки времени компиляции
- Пример
- Итог
- Ошибки времени выполнения
- Пример
- Итог
- Ошибки программирования
- 2. Ошибки во время выполнения
- 3. Логические ошибки
- 4. Распространённые ошибки
- Проверь себя:
В чем разница между ошибкой во время выполнения и ошибкой компилятора? [Дубликат]
Как вы можете видеть, в первом заявлении о кастинге говорится, что он приведет к ошибке во время выполнения, а в другой говорит, что это приведет к ошибке компилятора. Что делает эти ошибки? и как они отличаются друг от друга?
Неважно, рассматривал ли он мой пример или нет, на самом деле важно то, что я получил ответ четко. Этот парень объяснил это простым способом, который легко понять наивному программисту, как я.
Спасибо, AbdullahR, я надеялся, что из моего примера вы сможете понять разницу и выдвинуть информацию, которая вам нужна для домашней работы, и я не передам вам ответ, необходимый для вашей домашней работы напрямую.
10 ответов
Ошибка времени выполнения будет возникать только тогда, когда код действительно запущен. Это наиболее сложно — и привести к сбоям программы и ошибкам в вашем коде, которые трудно отследить.
В примере может потребоваться преобразовать строку: «hello» в целое число:
string helloWorld = "hello"; int willThrowRuntimeError = Convert.ToInt32(helloWorld);
Компилятор может не рассматривать это как проблему, но при запуске будет выведена ошибка.
Ошибки компилятора связаны с неточностями в коде, где компилятор выдает ошибку, чтобы предупредить вас о том, что не будет компилироваться и, следовательно, не может быть запущено.
Пример ошибки компилятора:
Ошибка во время выполнения во время работы программы. Ошибка компилятора возникает при попытке скомпилировать код.
Если вы не можете скомпилировать свой код, это ошибка компилятора.
Если вы компилируете и запускаете свой код, но затем он не выполняется во время выполнения, это время выполнения.
В вашем примере discountVariable имеет объявленный тип DiscountSale а saleVariable имеет другой тип. Когда вы пытаетесь присвоить значение одного другому с помощью строки discountVariable = saleVariable , это вызывает ошибку компилятора. Если вы поместите приведение на место (DiscountSale) , это сообщит компилятору, что все в порядке. Затем он ломается при запуске, потому что saleVariable самом деле не относится к типу DiscountSale .
+1, потому что это самый простой лучший ответ на вопрос: в чем разница между ошибкой во время выполнения и ошибкой компилятора? Я был бы намного счастливее, если бы ответ фактически касался конкретного примера, предложенного ОП, однако.
Ошибки времени компиляции относятся к синтаксису и семантике. Например, если вы выполняете операции с различными типами. Пример: добавление строки с int или деление строки на реальный. (прочитайте последний параграф!)
Ошибки времени выполнения — это те, которые обнаруживаются при выполнении программы. Например, деление на ноль. Компилятор не может знать, приведет ли операция x/a-b к делению на ноль до выполнения.
Это очень широкое объяснение. Существует много интеллектуальных компиляторов, а также возможность внутреннего кастинга между различными типами, что приводит к операциям, которые имеют смысл. Это возможно для предварительного компиляции кода и просмотра некоторых ошибок времени выполнения, даже если код не выполняется.
Ошибки времени компиляции — это ошибки синтаксиса и семантики.
Ошибки времени выполнения являются ошибками логики в первую очередь. Из-за чего-то, о котором забыл программист, программа вылетает, например. деление на 0, обращение к переменной без инициализации первой и т.д.
Ошибка компиляции означает, что компилятор знает, что discountVariable = saleVariable должен быть завершен с помощью двоеточия ниже discountVariable = saleVariable; , поэтому он будет вызывать ошибку при компиляции кода.
Ошибка времени выполнения означает, что ошибка будет возникать во время выполнения, потому что, даже если вы производите продажуVariable в discountVariable, бросок не может принимать, поскольку они различаются по типу.
Думаю, у вас уже есть общий смысл того, в чем разница. В частности, в коде, который вы указали в OP,
- Во втором утверждении компилятор сравнивает типы на LHS и RHS и не обнаруживает, что имплицитное применение невозможно, поэтому оно дает ошибку.
- первый оператор рассматривается как один и тот же, но здесь программист явно использует тип, который так же хорош, как компилятор, что я знаю, что я делаю, и, конечно, компилятор доверяет вам и не дает вам никаких ошибок.
Потому что компилятор не знает тип объекта «saleVariable», пока это значение не было установлено, когда программа запущена.
Вы заставляете все, что есть в salesVariable, в тип DiscountSale, это считается небезопасным и не может быть оценено до времени выполнения.
Не +1, потому что «компилятор не знает тип объекта saleVariable». Это не правда. Компилятор знает тип — он просто несовместим с DiscountSale.
Компиляция/время компиляции/синтаксис/семантические ошибки: Ошибки компиляции или компиляции возникают из-за ошибки ввода, если мы не следуем правильному синтаксису и семантике любого языка программирования, тогда компилируем время ошибки генерируются компилятором. Они не позволят вашей программе выполнять одну строку до тех пор, пока вы не удалите все синтаксические ошибки или пока не будете отлаживать ошибки времени компиляции.
Пример: Отсутствие точки с запятой в C или опечатки int как int .
Ошибки времени выполнения: Ошибки времени выполнения — это ошибки, возникающие при запуске программы. Эти типы ошибок приведут к тому, что ваша программа будет вести себя непредсказуемо или даже может убить вашу программу. Их часто называют исключениями.
Пример: предположим, что вы читаете файл, который не существует, приведет к ошибке выполнения.
Ошибки компилятора связаны с неточностями в коде, где компилятор выдает ошибку, чтобы предупредить вас о том, что не будет компилироваться и, следовательно, не может быть запущено.
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 к делению на ноль до выполнения
Разница между ошибками времени компиляции и времени выполнения в Java
Чтобы разобраться, в чем разница между ошибками времени компиляции и ошибками времени выполнения в Java, разберемся в сути каждого вида.
Ошибки времени компиляции
Это синтаксические ошибки в коде, которые препятствуют его компиляции.
Пример
Итог
C:\Sample>Javac Test.java Test.java:3: error: ';' expected System.out.println("Hello")
Ошибки времени выполнения
Исключение (или исключительное событие) – это проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы прерывается, и программа / приложение прерывается ненормально, что не рекомендуется, поэтому эти исключения должны быть обработаны.
Пример
import java.io.File; import java.io.FileReader; public class FilenotFound_Demo < public static void main(String args[]) < File file = new File("E://file.txt"); FileReader fr = new FileReader(file); >>
Итог
C:\>javac FilenotFound_Demo.java FilenotFound_Demo.java:8: error: unreported exception FileNotFoundException; must be caught or declared to be thrown FileReader fr = new FileReader(file); ^ 1 error
Средняя оценка 5 / 5. Количество голосов: 2
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Видим, что вы не нашли ответ на свой вопрос.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Ошибки программирования
Ошибки, которые обнаруживает компилятор, называют синтаксическими ошибками или ошибками компиляции. Синтаксические ошибки являются результатом ошибок в конструкции кода, таких как неправильное написание ключевого слова, пропуск необходимого знака пунктуации или использование открывающей фигурной скобки без соответствующей закрывающей фигурной скобки. Эти ошибки обычно легко обнаружить, поскольку компилятор говорит вам, где они находятся и что стало их причиной. Пример программы с синтаксической ошибкой:
public class ShowSyntaxErrors < public static main(String[] args) < System.out.println("Welcome to Java); >>
Попытка компиляции приведённого кода:
Будет сообщено о четырёх ошибках, но в действительности программа содержит две ошибки:
- Во второй строке отсутствует ключевое слово void перед main
- Строка Welcome to Java должна быть закрыта закрывающей кавычкой в третьей строчке программы
Поскольку одна ошибка часто будет приводить к показу множества ошибок компиляции в разных строках, хорошей практикой является исправление ошибок начиная с верхней строки и постепенно двигаясь вниз. Исправление ошибок, которые ранее возникли в программе, может также исправить дополнительные ошибки, которые произошли позже.
Совет: если вы не знаете, как исправить ошибку, внимательно сравните вашу программу, символ за символом с похожими примерами в тексте. На начальном этапе обучения вы, вероятно, будете проводить много времени исправляя ошибки синтаксиса. Скоро вы будете знакомы с синтаксисом Java и сможете быстро исправлять синтаксические ошибки.
2. Ошибки во время выполнения
Ошибки во время выполнения – это ошибки, которые приводят к ненормальному обрывы работы программы. Они возникают во время работы программы, если среда обнаруживает операцию, которую невозможно выполнить. Обычно ошибки ввода становятся причинами ошибок во время выполнения. Ошибки ввода возникают, когда программа ожидает от пользователя ввода значения, но пользователь вводит величину, которую программа не может обработать. Например, программа ожидает получение числа, но вместо этого пользователь вводит строку, это приводит к ошибкам в программе, связанным с типами данных.
Другой пример ошибок во время выполнения – это деление на ноль. Это происходит, когда в целочисленном деление делитель равен нулю. Пример программы, которая вызовет ошибку во время выполнения:
public class ShowRuntimeErrors < public static void main(String[] args) < System.out.println(1 / 0); >>
3. Логические ошибки
Логические ошибки происходят, когда программа неправильно выполняет то, для чего она была создана. Ошибки этого рода возникают по многим различным причинам. Допустим, вы написали программу, которая конвертирует 35 градусов Цельсия в градусы Фаренгейта следующим образом:
public class ShowLogicErrors < public static void main(String[] args) < System.out.println("Celsius 35 is Fahrenheit degree "); System.out.println((9 / 5) * 35 + 32); >>
Вы получите 67 градусов по Фаренгейту, что является неверным. Должно быть 95.0. В Java целочисленное деление показывает только часть – дробная часть отсекается, по этой причине в Java 9 / 5 это 1. Для получения правильного результата, нужно использовать 9.0 / 5, что даст результат 1.8.
Обычно ошибки синтаксиса легко обнаружить и легко исправить, поскольку компилятор даёт указания откуда пришла ошибка и что не так. Ошибки во время выполнения не трудны для поиска, поскольку причина и место для этих ошибок также показывается в консоли во время прерывания программы. Поиск логических ошибок, в свою очередь, очень сложный. В последующих главах вы обучитесь техникам трассировки программ и поиска логических ошибок.
4. Распространённые ошибки
Пропуск закрывающей фигурной скобки, пропуск точки с запятой, пропуск кавычки для строки и неправильное написание имён – всё это самые распространённые ошибки для новых программистов.
Частые ошибки 1: Пропущенные фигурные скобки
Фигурные скобки используются для обозначения в программе блоков. Каждой открывающей фигурной скобке должна соответствовать закрывающая фигурная скобка. Распространённая ошибка – это пропуск закрывающей фигурной скобки. Чтобы избежать эту ошибки, печатайте закрывающую фигурную скобку всякий раз, когда печатаете открывающую фигурную скобку как показано в следующем примере:
Если вы используете IDE такую как NetBeans и Eclipse, то IDE автоматически вставит закрывающую фигурную скобку каждой введённой вами открывающей фигурной скобки.
Частые ошибки 2: Пропуск точки с запятой
Каждая инструкция заканчивается ограничителем инструкции (;). Часто новые программисты забывают поместить ограничитель инструкции для последней инструкции в блоке как это показано в следующем примере:
Частые ошибки 3: Пропуск кавычки
Строки должны помещаться в кавычки. Часто начинающие программисты забывают поместить кавычку в конце строки как показано в следующем примере:
Если вы используете IDE, такую как NetBeans и Eclipse, то IDE автоматически вставит закрывающую кавычку каждый раз, когда вы ввели открывающую кавычку.
Частые ошибки 4: Неправильное написание имён
Java чувствительная к регистру. Неправильное написание имён – частая ошибка для новых программистов. Например, пишут слово main как Main, а вместо String пишут string. Пример:
Проверь себя:
- Что такое синтаксические ошибки (ошибки компилятора), ошибки во время работы и логические ошибки?
- Приведите примеры синтаксических ошибок, ошибок во время выполнения и логических ошибок?
- Если вы забыли написать закрывающую кавычку для строки, какого рода ошибка возникнет?
- Если ваша программа должна считать целое число, но пользователь ввёл строку, возникнет ли ошибка во время работы программы? Если да, то какого рода это ошибка?
- Предположим вы пишите программу для вычисления периметра прямоугольника, но по ошибке написали программу, которая вычисляет площадь прямоугольника. Какого рода эта ошибка?
- Выявите и исправьте ошибки в следующем коде: