общая ошибка компилятора что это

Русские Блоги

20 распространенных ошибок Java и как их избежать

оригинал:50 Common Java Errors and How to Avoid Them (Part 1)
Автор:Angela Stringfellow
перевод: Гусь напуган

Примечание переводчика: в этой статье представлены 20 распространенных ошибок компилятора Java. Каждая ошибка включает фрагменты кода, описания проблем и предоставляет ссылки по теме, которые помогут вам быстро понять и решить эти проблемы. Ниже приводится перевод.

При разработке программного обеспечения Java вы можете столкнуться со многими типами ошибок, но большинства из них можно избежать. Мы тщательно отобрали 20 наиболее распространенных ошибок программного обеспечения Java, включая примеры кода и руководства, которые помогут вам решить некоторые распространенные проблемы с кодированием.

Чтобы получить дополнительные советы и рекомендации по написанию программ на Java, вы можете загрузить наш «Comprehensive Java Developer’s Guide«Эта книга содержит все, что вам нужно, от всевозможных инструментов до лучших веб-сайтов и блогов, каналов YouTube, влиятельных лиц в Twitter, групп в LinkedIn, подкастов, мероприятий, которые необходимо посетить, и многого другого.

Ошибка компилятора

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

1. “… Expected”

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

Обычно это сообщение об ошибке не указывает точное местонахождение проблемы. Чтобы найти проблему, вам необходимо:

2. “Unclosed String Literal”

Если в конце строки отсутствует кавычка, создается сообщение об ошибке «Незамкнутый строковый литерал», и это сообщение отображается в строке, где произошла ошибка.

Обычно эта ошибка возникает в следующих ситуациях:

3. “Illegal Start of an Expression”

Есть много причин для ошибки «Незаконное начало выражения». Это стало одним из наименее полезных сообщений об ошибках. Некоторые разработчики думают, что это вызвано плохим запахом кода.

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

4. “Cannot Find Symbol”

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

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Сообщение об ошибке «Не удается найти символ» может иметь множество причин:

5. “Public Class XXX Should Be in File”

Если класс XXX и имя файла программы Java не совпадают, будет сгенерировано сообщение об ошибке «Открытый класс XXX должен быть в файле». Только когда имя класса и имя файла Java совпадают, код может быть скомпилирован.

Чтобы решить эту проблему, вы можете:

6. “Incompatible Types”

Когда компилятор выдает сообщение «несовместимые типы», решить эту проблему действительно непросто:

7. “Invalid Method Declaration; Return Type Required”

Это сообщение об ошибке означает, что тип возвращаемого значения метода не объявлен явно в объявлении метода.

Есть несколько ситуаций, которые вызывают ошибку «недопустимое объявление метода; требуется тип возвращаемого значения»:

8. “Method in Class Cannot Be Applied to Given Types”

Это сообщение об ошибке более полезно, оно означает, что метод был вызван с неправильными параметрами.

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

9. “Missing Return Statement”

Когда в методе отсутствует оператор возврата, выдается сообщение об ошибке «Отсутствует оператор возврата». Метод с возвращаемым значением (тип, не являющийся недействительным) должен иметь оператор, который возвращает значение, чтобы значение можно было вызвать вне метода.

Есть несколько причин, по которым компилятор выдает сообщение «отсутствует оператор возврата»:

10. “Possible Loss of Precision”

Когда информация, присвоенная переменной, превышает верхний предел, который может нести переменная, выдается ошибка «Возможная потеря точности». Как только это произойдет, часть информации будет отброшена. Если это не проблема, переменную следует явно объявить в коде как новый тип.

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Ошибка «возможная потеря точности» обычно возникает в следующих ситуациях:

Основные типы данных в JavaОбъясняет характеристики различных типов данных.

11. “Reached End of File While Parsing”

Это сообщение об ошибке обычно появляется, когда в программе отсутствует закрывающая фигурная скобка («>»). Иногда эту ошибку можно быстро исправить, добавив закрывающую скобку в конце кода.

Приведенный выше код приведет к следующей ошибке:

Инструменты кодирования и правильные отступы кода могут упростить поиск этих несоответствующих фигурных скобок.

12. “Unreachable Statement”

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

Обычно эту ошибку можно исправить, просто переместив оператор return. Прочтите эту статью:Как исправить ошибку «Недостижимый отчет»。

13. “Variable Might Not Have Been Initialized”

Если локальная переменная, объявленная в методе, не инициализирована, возникнет такая ошибка. Такая ошибка возникает, если вы включаете переменную без начального значения в оператор if.

14. “Operator … Cannot be Applied to ”

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

Эта ошибка часто возникает, когда код Java пытается использовать строковые типы в вычислениях (вычитание, умножение, сравнение размеров и т. Д.). Чтобы решить эту проблему, вам необходимо преобразовать строку в целое число или число с плавающей запятой.

15. “Inconvertible Types”

Когда код Java пытается выполнить недопустимое преобразование, возникает ошибка «Неконвертируемые типы».

Например, логические типы нельзя преобразовать в целые числа.

16. “Missing Return Value”

Если оператор возврата содержит неверный тип, вы получите сообщение «Отсутствует возвращаемое значение». Например, посмотрите на следующий код:

Возвращается следующая ошибка:

Обычно эта ошибка возникает из-за того, что оператор return ничего не возвращает.

17. “Cannot Return a Value From Method Whose Result Type Is Void”

Эта ошибка Java возникает, когда метод void пытается вернуть какое-либо значение, например, в следующем коде:

Обычно эту проблему может решить изменение типа возвращаемого значения метода, чтобы он соответствовал типу в операторе возврата. Например, следующий void можно изменить на int:

18. “Non-Static Variable … Cannot Be Referenced From a Static Context”

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

Чтобы устранить ошибку «Нестатическая переменная… На нее нельзя ссылаться из статического контекста», можно сделать две вещи:

19. “Non-Static Method … Cannot Be Referenced From a Static Context”

Эта проблема возникает, когда код Java пытается вызвать нестатический метод в статическом классе. Например, такой код:

Вызовет эту ошибку:

Чтобы вызвать нестатический метод в статическом методе, необходимо объявить экземпляр класса вызываемого нестатического метода.

20. “(array) Not Initialized”

Если массив был объявлен, но не инициализирован, вы получите сообщение об ошибке типа «(массив) не инициализирован». Длина массива фиксирована, поэтому каждый массив необходимо инициализировать требуемой длиной.

Следующий код правильный:

это тоже нормально:

Продолжение следует

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

Интеллектуальная рекомендация

PAT Class B 1090 Упаковка для опасных грузов

При транспортировке товаров в контейнерах нужно быть очень осторожным, чтобы не упаковать несовместимые товары в ящик. Например, окислитель не должен находиться в одной емкости с легковоспламеняющейся.

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Клавиша ярлыка терминатора Ubuntu1804

Установить Рендеринг горячая клавиша Ctrl + Shift + E Вертикальное сегментационное окно Ctrl + Shift + O Горизонтальное сегментационное окно Ctrl + Shift + N Свободно переключите каждое окно сегментац.

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Конфигурация резервного копирования библиотеки Postgresl под WIN окружающей среды

1. Изменение основного сервера и в режиме ожиданияИзмените разрешение подключения файла pg_hba.conf базы данных: изменился на: В это время, вы должны убедиться, что вы можете подк.

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Каркас TensorFlow для машинного обучения

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

Компьютерная графика (семь) Кривая Безье (Bessel) и исходный код

Загрузка исходного кода:Нажмите меня, чтобы скачать «Кривая Безье» была изобретена французским математиком Пьером Безье, который заложил основы компьютерной векторной графики. Его основное.

Источник

Распространенные ошибки компилятора

В этом разделе показаны типичные ошибки компилятора, возникающие при переносе существующей базы кода. Эти примеры происходят из кода HAL на уровне системы, хотя эти понятия напрямую применимы к коду уровня пользователя.

Предупреждение C4311. Пример 1

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «Long без знака

pPciAddr->u.AsULONG = (ULONG) CIA_PCI_CONFIG_BASE_QVA;

Птртаулонг — это встроенная функция или макрос в зависимости от используемого использования. Он усекает указатель до ulong. Хотя 32-разрядные указатели не затрагиваются, верхняя половина 64-разрядного указателя усекается.

CIA _ _ Конфигурация PCI _ Базовая _ кВА объявляется как PVOID. Приведение ulong работает в 32-разрядном мире, но приводит к ошибке в 64-разрядном мире. Решением является получение 64-разрядного указателя на ulong, поскольку изменение определения объединения, которое ппЦиаддр->u. асулонг, определено в, изменяет слишком много кода.

Использование макроса птртаулонг для преобразования 64-разрядного PVOID в требуемый ulong разрешено, так как у нас есть сведения о конкретном значении CIA _ PCI _ config _ Base _ кВА. В этом случае этот указатель никогда не будет содержать данные в верхнем 32 бит.

Предупреждение C4311, пример 2

«приведение типа»: усечение указателя из «ошибка структуры» _ _ кадра * _ _ ptr64 «в» Long без знака

Проблема заключается в том, что последний параметр этой функции является указателем на структуру данных. Поскольку Пункорректаблиррор является указателем, он изменяет размер с помощью модели программирования. Прототип для кебугчеккекс был изменен так, чтобы последний параметр был типа ulong _. В результате необходимо привести указатель функции к типу записи _ типа ulong.

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

Предупреждение C4244, пример 1

«=»: преобразование из » _ компонент конфигурации _ структуры * _ _ ptr64″ в » _ компонент конфигурации _ структуры * «, возможна утрата данных

Функция объявляет компонент переменной в качестве _ компонента пконфигуратион. Позже переменная будет использоваться в следующем назначении, которое отображается правильно:

Однако компонент типа ПКОНФИГУРАТИОН _ определяется следующим образом:

Определение типа для компонента ПКОНФИГУРАТИОН _ предоставляет 32-разрядный указатель как в 32-разрядных, так и в 64-разрядных моделях, так как он объявлен как указатель _ 32. Исходный конструктор этой структуры знал, что он будет использоваться в 32-разрядном контексте в BIOS и явно определен для этого использования. этот код прекрасно работает в 32-разрядных Windows, так как указатели должны быть 32-разрядными. в 64-разрядном Windows он не работает, так как код находится в 64-разрядном контексте.

Чтобы обойти эту проблему, используйте компонент конфигурации, _ * а не 32-разрядный _ компонент пконфигуратион. Очень важно четко понимать назначение кода. Если этот код предназначен для 32 сенсорного управления BIOS или системным пространством, это исправление не будет работать.

Указатель _ 32 определен в нтдеф. h и Winnt. h.

Предупреждение C4242, пример 2

«=»: преобразование » _ _ Int64″ в «без знака Long», возможна утрата данных

Это предупреждение создается потому, что вычисление использует 64-битные значения, в данном случае указатели и помещает результат в 32-разрядный ulong.

Приведение результата позволяет компилятору узнать, что вы уверены в результатах. С другой стороны, убедитесь, что вы понимаете вычисление и уверены, что оно поместится в 32-разрядном ulong.

Если результат может не уместиться в 32-разрядном ulong, измените базовый тип переменной, которая будет содержать результат.

Предупреждение C4311-пример 1

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «unsigned long»

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

Пулонг _ PTR — это указатель, который сам по себе 32 бит для 32-бит Windows и 64 бит для Windows 64-bit. он указывает на целое число без знака _ типа ULONG, которое 32 бит для 32-бит Windows и 64 бит для Windows 64-bit.

Предупреждение C4311-пример 2

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «unsigned long»

Указатель ПЦииоспацебасе содержит кВА, созданный в макросе HAL, _ _ кВА. Этот макрос возвращает 64-разрядное значение с максимальным значением 32, равное нулю, поэтому математические вычисления будут работать. Можно просто оставить код для усечения указателя в ulong, но такой подход не рекомендуется для повышения удобства поддержки и переносимости кода. Например, содержимое кВА может измениться в будущем, чтобы использовать некоторые верхние биты на этом уровне, нарушая код.

Будьте в безопасности и используйте ulong _ ptr для всех математических адресов и указателей.

HalpCMOSRamBase = (PVOID)((ULONG_PTR)PciIoSpaceBase + CMOS_ISA_PORT_ADDRESS);

Предупреждение C4311. Пример 3

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «unsigned long»

Компилятор предупреждает о адресе (&) и операторах сдвига влево (

Предупреждение C4311. Пример 4

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «unsigned long»

Транслатедаддресс — это объединение, которое выглядит примерно следующим образом:

Зная, что остальная часть кода может поместиться в Хигхпарт, мы можем выбрать любое из приведенных здесь решений.

С осторожностью мы могли бы использовать следующее:

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

Предупреждение C4311. Пример 5

«приведение типа»: усечение указателя из «void * _ _ ptr64» в «unsigned long»

Виндоврегистерс->Виндовбасе является указателем и теперь имеет 64 бит. В коде написано, что это значение равно 20 битам сдвига вправо. Компилятор не позволяет использовать оператор сдвига вправо (>>) для указателя; Поэтому необходимо привести его к целому числу.

Wbase.Wbase= PtrToUlong ( (PVOID) ((ULONG_PTR) (WindowRegisters->WindowBase) >> 20));

Источник

Ошибки компиляции

общая ошибка компилятора что это. Смотреть фото общая ошибка компилятора что это. Смотреть картинку общая ошибка компилятора что это. Картинка про общая ошибка компилятора что это. Фото общая ошибка компилятора что это

ПРИМЕЧАНИЕ: Эти ошибки обычно не выводят окно и просто показывают » Build Failed » в выводе компилятора. Если появляется окно, то это обычно ошибка Runner Error, которая объясняется здесь.

Все сообщения об ошибках компилятора будут иметь одинаковый формат:

Если ошибка найдена в сценарии, то это будет просто:

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

Разное

Струны

Скрипты, Функции и аргументы

Использование неинициализированной переменной [var]Вы попытались использовать именованную переменную до того, как она была инициализированаПеременная [var] доступна только для чтенияВы пытались изменить именованную переменную, когда она не может быть измененаНевозможно найти переменную с именем [var]Именованная переменная не может быть найдена в текущей компиляцииНекорректная ссылка на переменнуюВы попытались сослаться на переменную неправильным способомПопытка установить переменную [var], доступную только для чтения.Вы пытались установить переменную, которая доступна только для чтенияНевозможно повторно объявить встроенную переменнуюВы пытались объявить локальную переменную, используя то же имя, что и одна из встроенных переменныхНевозможно использовать имя ресурса для переменнойВы можете использовать то же имя ресурса из дерева ресурсов в качестве локальной переменной[Переменная] доступно только для чтенияВы пытались использовать переменную, которая была помечена как доступная только для чтенияИндекс массива не должен быть отрицательнымВы пытались получить доступ, создать или установить значение массива, используя отрицательный индекс массиваПерерыв, используемый без контекстаВы не использовали разрыв внутри переключателя, петли или любой другой разрешенной структурыПродолжение используется без контекстаВы не использовали continue в правильном контекстепродолжение заявления не допускается на данном этапеВы использовали continue в той части вашего кода, где это запрещеноперечисление num недействительноНомер перечисления недействителен для данного перечислениянеправильное перечислениеВы неправильно создали перечислениеenum [перечисление] уже определеноВы попытались определить перечисление, используя то же имя, что и другое, ранее определенное.неправильное заполнение перечисленияПеречисление имеет недопустимую записьвыражение перечисления должно быть целочисленной константойЗапись перечисления не оценивается как целочисленная константаСсылка на перечисление [ключ] не существует в [перечислении]Вы попытались сослаться на запись перечисления, используя ключ, который ранее не был определен для этого перечисления

Ожидаемые символы/значения

Источник

Ошибка компиляции “Не найти символ”

Просмотрите, что такое ошибки компиляции, а затем конкретно объясните, что такое ошибка «не может найти символ» и как она вызвана.

1. Обзор

В этом учебнике мы рассмотрим, что такое ошибки компиляции, а затем конкретно объясним, что такое ошибка «не может найти символ» и как она вызвана.

2. Ошибки времени компиляции

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

В основном существует три типа ошибок времени компиляции:

3. Ошибка “не может найти символ”

Ошибка “не может найти символ” возникает в основном, когда мы пытаемся использовать переменную, которая не определена или объявлена в нашей программе.

3.1. Что может вызвать ошибку «не может найти символ»?

Действительно, есть только одна причина: Компилятор не смог найти определение переменной, на которую мы пытаемся ссылаться.

Но, Есть много причин, почему это происходит. Чтобы помочь нам понять, почему, давайте напомним себе, из чего состоит Java-код.

Наш исходный код Java состоит из:

4. Опечатка

Наиболее распространенные вопросы связаны с орфографией. Если мы вспомним, что все идентификаторы Java чувствительны к случаям, мы можем видеть, что:

все это будет по-разному способы неправильно ссылаться на Стрингбилдер класс.

5. Сфера применения экземпляра

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

Допустим, у нас есть Статья класс, который вызывает generateId метод:

Но, мы объявляем generateId метод в отдельном классе:

Как и во всех зрелых языках, существует несколько способов решения этой проблемы. Но, один из способов было бы построить ИдГенератор в Статья класса, а затем вызвать метод:

6. Неопределенные переменные

Иногда мы забываем объявить переменную. Как мы видим из фрагмента ниже, мы пытаемся манипулировать переменной мы не объявили, в данном случае, текстовые :

Мы решаем эту проблему, объявляя переменную текстовые типа Струнные :

7. Переменный охват

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

Переменные внутри цикла недоступны за пределами цикла:

если заявление должно идти внутри для петли если нам нужно изучить символы больше:

8. Недействительное использование методов или полей

Ошибка “не может найти символ” также произойдет, если мы используем поле в качестве метода или наоборот:

Теперь, если мы попытаемся сослаться на тексты поле, как если бы это был метод:

то мы увидим ошибку.

Вообще-то, есть getter метод, который мы можем использовать вместо этого:

Ошибка работы на массиве, а не элемент массива также является проблемой:

И так забывает новые ключевое слово, как в:

9. Импорт пакетов и классов

Другая проблема заключается в том, чтобы забыть импортировать класс или пакет. Например, с помощью Список объект без импорта java.util.List :

Этот код не будет компилироваться, так как программа не знает, что Список ош

10. Неправильный импорт

Импорт неправильного типа, из-за завершения IDE или автоматической коррекции также является общей проблемой.

Подумайте о ситуации, когда мы хотим использовать даты в Java. Много раз мы могли бы импортировать неправильный Дата класс, который не предоставляет методы и функции, как другие классы даты, которые нам могут понадобиться:

Просто ссылаясь на getDate () из java.util.Date не будет работать:

Вместо этого мы используем Календарь объект:

Однако, если мы импортировали Местное класса, нам не нужен дополнительный код, который предоставляет нам информацию, в которой мы нуждаемся:

11. Заключение

Компиляторы работают над фиксированным набором правил, которые являются специфическими для языка. Если код не придерживается этих правил, компилятор не может выполнить процесс преобразования, что приводит к ошибке компиляции. Когда мы сталкиваемся с ошибкой компиляции “Не может найти символ”, ключ должен определить причину.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *