В одном из моих профи слайдов по плойморфизму я вижу этот фрагмент кода с несколькими комментариями:
discountVariable = //will produce (DiscountSale)saleVariable;//run-time error discountVariable = saleVariable //will produce //compiler error
Как вы можете видеть, в первом заявлении о кастинге говорится, что он приведет к ошибке во время выполнения, а в другой говорит, что это приведет к ошибке компилятора.
Что делает эти ошибки? и как они отличаются друг от друга?
ОТВЕТЫ
Ответ 1
Ошибка времени выполнения будет возникать только тогда, когда код действительно запущен. Это наиболее сложно — и привести к сбоям программы и ошибкам в вашем коде, которые трудно отследить.
В примере может потребоваться преобразовать строку: «hello» в целое число:
string helloWorld = «hello»; int willThrowRuntimeError = Convert.ToInt32(helloWorld);
Компилятор может не рассматривать это как проблему, но при запуске будет выведена ошибка.
Ошибки компилятора связаны с неточностями в коде, где компилятор выдает ошибку, чтобы предупредить вас о том, что не будет компилироваться и, следовательно, не может быть запущено.
Ошибка компиляции фильма Premiere Pro 5 СПОСОБОВ РЕШЕНИЯ Error Compiling Movie, GPU Render Error
Пример ошибки компилятора:
int = «this is not an int»;
Надеюсь, что это поможет.
Ответ 2
Ошибка во время выполнения во время работы программы. Ошибка компилятора возникает при попытке скомпилировать код.
Если вы не можете скомпилировать свой код, это ошибка компилятора.
Если вы компилируете и запускаете свой код, но затем он не выполняется во время выполнения, это время выполнения.
Ответ 3
Ошибки времени компиляции относятся к синтаксису и семантике. Например, если вы выполняете операции с различными типами. Пример: добавление строки с int или деление строки на реальный. (прочитайте последний параграф!)
Ошибки времени выполнения — это те, которые обнаруживаются при выполнении программы. Например, деление на ноль. Компилятор не может знать, приведет ли операция x/a-b к делению на ноль до выполнения.
Это очень широкое объяснение. Существует много интеллектуальных компиляторов, а также возможность внутреннего кастинга между различными типами, что приводит к операциям, которые имеют смысл. Это возможно для предварительного компиляции кода и просмотра некоторых ошибок времени выполнения, даже если код не выполняется.
Ответ 4
Ошибка компиляции означает, что компилятор знает, что discountVariable = saleVariable должен быть завершен с помощью двоеточия ниже discountVariable = saleVariable; , поэтому он будет вызывать ошибку при компиляции кода.
Ошибка времени выполнения означает, что ошибка будет возникать во время выполнения, потому что, даже если вы производите продажуVariable в discountVariable, бросок не может принимать, поскольку они различаются по типу.
Ответ 5
Ошибки времени компиляции — это ошибки синтаксиса и семантики.
Ошибки времени выполнения являются ошибками логики в первую очередь. Из-за чего-то, о котором забыл программист, программа вылетает, например. деление на 0, обращение к переменной без инициализации первой и т.д.
BP1-1-2-2 Ошибки выполнения программы
Ответ 6
Потому что компилятор не знает тип объекта «saleVariable», пока это значение не было установлено, когда программа запущена.
Вы заставляете все, что есть в salesVariable, в тип DiscountSale, это считается небезопасным и не может быть оценено до времени выполнения.
Ответ 7
Думаю, у вас уже есть общий смысл того, в чем разница. В частности, в коде, который вы указали в OP,
- Во втором утверждении компилятор сравнивает типы на LHS и RHS и не обнаруживает, что имплицитное применение невозможно, поэтому оно дает ошибку.
- первый оператор рассматривается как один и тот же, но здесь программист явно использует тип, который так же хорош, как компилятор, что я знаю, что я делаю, и, конечно, компилятор доверяет вам и не дает вам никаких ошибок.
Ответ 8
Если вы используете Google, вы получите следующее:
Ошибка времени компиляции — это любой тип ошибки, который предотвращает компиляцию java-программы как синтаксическая ошибка, не найденный класс, неправильное имя файла для определенного класса, возможная потеря точности при смешивании разных типов данных Java и и так далее.
Ошибка времени выполнения означает ошибку, которая происходит, когда программа запущена. Чтобы справиться с такими ошибками, 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 .
Ошибки времени выполнения: Ошибки времени выполнения — это ошибки, возникающие при запуске программы. Эти типы ошибок приведут к тому, что ваша программа будет вести себя непредсказуемо или даже может убить вашу программу. Их часто называют исключениями.
Пример: предположим, что вы читаете файл, который не существует, приведет к ошибке выполнения.
Источник: utyatnishna.ru
Средства получения справки и отладки программ
Ошибки делятся на три категории: ошибки разработки ( синтаксические ошибки ), ошибки компиляции, ошибки выполнения.
Синтаксическая ошибка — это нарушение правил языка VBA.
Это может быть некорректный оператор, неверно введенное имя переменной , если объявление переменных обязательно ( Tools-Options-вкл.Editor -включена опция Require Variable Declaration ), отсутствие разделителей между аргументами, несоответствие открывающих и закрывающих скобок, отсутствие закрывающих операторных скобок ( End If, Next и др.), не уникальное название процедуры и т.п.
- включать опцию автоматической проверки синтаксиса — Auto Syntax Check ;
- пользоваться контекстно-зависимой подсказкой, которая возникает при наборе имен объектов, их свойств или методов и которая устанавливается опцией Auto Quick info ;
- выполнять правила синтаксиса при записи функций и конструкций языка. Для уточнения этих правил в окне программы можно выделить ключевое слово, оператор, функцию, объект, его свойство или метод и нажать клавишу F1. Появится окно справочной системы, которое соответствует выделенному фрагменту кода и показывает допустимую форму записи оператора.
При наборе текста процедур некорректный оператор выделяется цветом (по умолчанию красным) и причина возникновения ошибки поясняется сообщением. Невозможно запустить процедуру, если в какой-нибудь процедуре любого открытого проекта обнаружена синтаксическая ошибка .
При запуске процедуры происходит процесс проверки уже не отдельных строк, а программы в целом. Вначале происходит компиляция программы, и выявляются ошибки компиляции.
На этапе выполнения программы выявляются ошибки, которые не могли быть обнаружены редактором Visual Basic ( ошибки выполнения ).
Логические ошибки в программе не противоречит синтаксису оператора, но могут привести к неверным результатам выполнения программы. Примерами логических ошибок могут служить неверные имена или типы переменных , бесконечные циклы, ошибочные условия или неверные размеры массивов.
Ошибки вычислений могут являться результатом попытки выполнить недопустимую операцию, например, деление на нуль .
Во время выявления какой-нибудь ошибки происходит прерывание программы, если на вкладке General (Общие) диалогового окна Options установлена опция Break on All Errors (Останов при любой ошибке).
При прерывании программы возникает диалоговое окно , нажатие кнопки Debug в этом диалоговом окне переводит программу в режим отладки . Оператор, на котором произошло прерывание (в котором возникла ошибка), подсвечивается.
Окна отладчика
Процесс проверки работоспособности программы носит название «отладка» или «тестирование».
Для отладки процедур используются различные приемы:
- прерывание программы в заданной точке (контрольная точка — Breakpoint ) или при выполнении некоторого условия;
- выполнение программы по шагам (по операторам) — Step ;
- отслеживание значений переменных или свойств объектов (контрольные значения) — Watch ;
- изменение значений переменных вручную;
- редактирование текста программы в режиме прерывания;
- продолжение выполнения программы, начиная с некоторого оператора и т.п.
Если ошибка очевидна, то можно исправить ее, прекратив выполнение программы. Происходит переход в режим конструктора , в котором вносятся изменения в программу. Затем можно запустить программу заново. При перезапуске программа вновь возвращается к начальному состоянию, восстанавливаются исходные значения всех переменных и из памяти удаляются все приостановленные процедуры.
В режиме отладки программы можно продолжить или прервать выполнение программы, используя кнопкии
или соответствующие команды меню Run. Можно выполнять программу по шагам.
При корректировке текста программы в режиме прерывания редактор VB иногда выдает сообщение о невозможности продолжения программы.
Если Вы не уверены в том, как будет выполняться исправляемая команда, то
- перейти в окно Immediate Window ;
- скопировать в него или заново набрать в нем нужную команду;
- выполнить ее.
В режиме прерывания в этом окне будут доступны те же переменные, которые были доступны выполняемой процедуре в момент прерывания программы. Так как операторы, введенные в окне Immediate Window, не сохраняются после завершения работы с MS Excel . Если они должны быть сохранены, то их необходимо скопировать в программу.
Immediate Window (окно проверки)
Это окно (часто используется термин «оперативная панель») имеет две основные функции:
- выполнение команд;
- распечатка значений переменных или выражений во время выполнения процедур (одна из возможностей отладки программ).
Окно проверки используется для следующих целей:
- отображения информации, получаемой в результате выполнения команд процедуры ( отладочная печать );
- тестирования команд, вводимых непосредственно в этом окне;
- получения или изменения значений переменных;
- получения или изменения значений свойств объектов, доступных в выполняемой процедуре.
Чтобы вывести на экран окно отладки, выберите команду Immediate Window в меню View или нажмите клавиши Ctrl+G.
- Операторы, вводимые в окне проверки, выполняются в контексте, т.е. так, как если бы они вводились в выполняемую процедуру.
Окно открывается командой Immediate Window меню View (клавиши Ctrl+G ) и закрывается только щелчком на кнопку закрытия окна.
- Окно Immediate полезно при вводе однострочных команд.
- Для вычислений в этом окне используйте знак вопроса (?) или оператор Print перед рассчитываемым выражением,
- Любой оператор, записанный в строке окна или скопированный в это окно из текста процедуры, будет выполнен после нажатия клавиши Enter. Рассчитанное значение появляется в строке, следующей за выполненным оператором. Если скопированный оператор является оператором присваивания , то переменной будет присвоено рассчитанное значение.
Рис. 3.7. Прерывание программы
На рис. 3.7 в первой строке панели Immediate записана команда расчета произведения чисел 6 и 5, результат которого 30 виден во второй строке. В третьей строке записан оператор расчета площади круга, вычисляемый в режиме пошагового выполнения процедуры Circle_sq, а в четвертой строке — результат расчета этого оператора.
В пятой строке расположен оператор присваивания, скопированный из этой же процедуры в режиме пошагового выполнения процедуры Circle_sq. После нажатия клавиши Enter на панели Immediate не появляется результат расчета, но при установке курсора на название вычисляемой переменной (s) высвечивается вычисленное значение .
Рис. 3.8. Вывод в окне Immediate значений переменных s1 и n
Оператор ? 355/113 рассчитает приблизительное значение числа pi.
Оператор Debug.Print «value of a «,a, расположенный в теле процедуры , распечатает указанный текст и значение переменной a на одной строке.
Окно значения переменной
Если в программе установлена контрольная точка, то можно просмотреть значения переменных. Достаточно подвести курсор ( рис. 3.9) к идентификатору переменной внутри выполняемой процедуры и рядом с текстовым курсором появится текущее значение этой переменной как контекстная подсказка .
Рис. 3.9. Окно значения переменной показывает значение переменной Var_A, равное 2
Locals Window (окно локальных переменных)
Окно локальных переменных отображает все описанные в текущей процедуре переменные и их значения. Окно высвечивается командой Locals Window из меню View.
Рис. 3.10. Окно локальных переменных
Когда окно локальных переменных открыто, его обновление происходит автоматически при каждом переключении из режима выполнения в режим прерывания, при пошаговом выполнении процедуры, а также при перемещении по стеку вызова процедур.
В столбце Expression (Выражение) перечисляются все переменные, доступные в выполняемой процедуре. Первая переменная в этом списке — особая переменная, которая может быть развернута для просмотра всех переменных уровня текущего модуля, т.е. переменных, которые определены в области описаний модуля ( Declarations ). Для стандартных модулей ее имя совпадает с именем модуля. Для модулей класса или для процедурных листов формы это системная переменная Me.
Составные переменные (массивы, пользовательские типы ) могут быть свернуты или развернуты для просмотра значений составляющих их элементов — слева от названий таких переменных находятся соответствующие пиктограммы + или -.
На рис. 3.10 переменная Модуль1 развернута и в окне показаны переменные, объявленные в области описаний модуля.
В столбце Value (Значение) можно изменять значения переменных. Курсор , установленный на значении переменной, принимает форму текстового курсора. Введите новое значение и для сохранения модифицированного значения нажмите любую из клавиш Enter, Up, Down, Tab, Shift+Tab или щелкните левой кнопкой внутри окна Locals.
Если введенное значение некорректно, то оно, если это возможно, заменится на значение, соответствующее типу переменной в контексте выполняемой процедуры. В противном случае значение переменной остается доступным для редактирования. Для отмены еще не сохраненного модифицированного значения нажмите клавишу Esc.
Например, при вводе нуля в переменную типа Date значение заменится на 0:00:00. При вводе даты в переменную Integer может произойти ошибка Overflow, а введенное в переменную Integer символьное значение заменится на нуль.
В столбце Type (Тип) окна Locals отражаются типы переменных . Данные в этом столбце не редактируются.
В первой строке окна Locals отображается название текущей процедуры, проект и модуль, в котором она расположена. Вызванная процедура помещается на вершину стека выполняемых процедур и удаляется из стека после ее окончания. Можно просмотреть текст любой процедуры из стека и соответствующее ей окно локальных переменных. Для этого нажмите кнопку Call Stack(см. рис. 3.10).
Высвечивается окно стека вызовов ( Call Stack ), в котором надо выбрать нужную процедуру и нажать кнопку Show (Показать).
Рис. 3.11. Окно стека вызовов процедур
На рис. 3.11 показано окно стека с двмя процедурами, запущенными в следующей последовательности: Value_A, first. Окно локальных переменных на рис. 3.10 отражает значения переменных, доступных выбранной в этом окне процедуре Value_A.
Источник: intuit.ru
Разница между ошибками времени компиляции и времени выполнения в Java
Чтобы разобраться, в чем разница между ошибками времени компиляции и ошибками времени выполнения в Java, разберемся в сути каждого вида.
Ошибки времени компиляции
Это синтаксические ошибки в коде, которые препятствуют его компиляции.
Пример
public class Test < public static void main(String args[])< System.out.println(«Hello») >>
Итог
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
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Источник: hr-vector.com