JavaRush /Курсы /Java Syntax Pro /Популярные ошибки компилятора

Популярные ошибки компилятора

Java Syntax Pro
11 уровень , 4 лекция
Открыта

1. Забыли точку с запятой

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

Каждая команда внутри метода должна заканчиваться точкой с запятой. Точка с запятой — это разделитель команд: таким образом мы даем понять Java-компилятору, где заканчивается одна команда и начинается следующая.

Примеры ошибочных ситуаций:

Код с ошибками Исправленный код
int a
int b = 5
int c = a + b
int a;
int b = 5;
int c = a + b;
System.out.println("Hello")
System.out.println("Hello");
if (2 > 3)
   System.out.println("Мы в Австралии?")
if (2 > 3)
   System.out.println("Мы в Австралии?");


2. Забыли закрыть кавычки

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

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

Примеры таких ситуаций:

Код с ошибками Исправленный код
String s = "Привет;
String s = "Привет";
System.out.println("Hello);
System.out.println("Hello");
String s = "Привет";
String message = s + " и пока. ;
String s = "Привет";
String message = s + " и пока.";


3. Забыли знак плюс при склеивании строк

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

Примеры таких ситуаций:

Код с ошибками Исправленный код
String s = "Привет";
String message = s  " и пока.";
String s = "Привет";
String message = s + " и пока.";
int age = 35;
System.out.println("Age=" age);
int age = 35;
System.out.println("Age=" + age);
int age = 35;
System.out.println("Age=", age);
int age = 35;
System.out.println("Age=" + age);


4. Забыли закрыть фигурные скобки

Это очень распространенная ошибка. Обычно она возникает в двух случаях:

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

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

Примеры:

Код с ошибками Исправленный код
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
}
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Математика!");
      }
   }
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Математика!");
      }
   }
}


5. Забыли написать круглые скобки

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

Первый вариант — банально забыли поставить скобки в конце вызова метода:

Второй вариант — забыли обернуть в скобки условие оператора if-else.

Примеры:

Код с ошибками Исправленный код
System.out.println("Привет!");
System.out.println;
System.out.println("И пока!");
System.out.println("Привет!");
System.out.println();
System.out.println("И пока!");
if 2 < 3
{
   if 3 < 4
   {
      System.out.println("Математика!");
   }
}
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
}


6. Неправильно написан заголовок метода main

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

И, конечно, дело не в программисте, а в программе, компиляторе, валидаторе, Java-машине. Список виновных можно продолжать бесконечно.

Примеры:

Код с ошибками Пояснение
static void main(String[] args)
Пропущен public
public void main(String[] args)
Пропущен static
public main(String[] args)
Пропущен static и void
void main(String[] args)
Пропущены public и static
public static void main(String args)
Пропущены []
public static void main()
Пропущены String[] args
public static int main(String[] args)
Вместо void написано int


7. Имя файла отличается от имени класса

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

Имя файла Имя класса Примечание
Solution.java
Solution
Все отлично
Solutions.java
Solution
Лишняя буква s в названии файла
solution.java
Solution
Название файла с маленькой буквы
Solution.txt
Solution
Расширение файла txt вместо java
Solution.java
solution
Название класса с маленькой буквы

Вообще-то в файле с расширением java может быть объявлено несколько классов, но только у одного из них перед именем может быть слово public. Вот его-то имя и должно совпадать с именем файла.

В файле с расширением java всегда должен быть класс, имя которого совпадает с именем файла, и у него есть модификатор public. Пример:

Solution.java
public class Solution
{
}

class Apple
{
}

class Pineapple
{
}

Также в языке Java разрешено писать классы в классах. Это тоже способ обойти вышеозвученное ограничение. Если в файле объявлен публичный класс (с модификатором public), имя которого совпадает с именем файла, внутри этого публичного класса можно объявлять сколько угодно классов. Хотя это уже будут не обычные, а внутренние или вложенные классы. Пример:

Solution.java
public class Solution
{
   public class Apple
   {
   }

   public static class Pineapple
   {
   }
}


8. Забыли написать package

Т.к. в программах обычно тысячи классов, всем из них сложно подобрать простые, понятные и уникальные имена. Поэтому в Java все классы принято группировать по пакетам — package. Точно так же, как файлы группируются по папкам.

Поэтому в начале каждого класса нужно писать пакет, которому он принадлежит. Пример

Код без пакета Исправленный пример
public class Solution
{
}
package com.javarush.tasks.task0001;

public class Solution
{
}


9. Забыли добавить import

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

Пример:

Без использования import С использованием import
public class Solution
{
   java.util.Scanner scanner = new java.util.Scanner();
}
import java.util.Scanner;

public class Solution
{
 Scanner console = new Scanner();
}

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


Комментарии (307)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yulia Уровень 16
25 сентября 2025
Спасибо) выдохнула))
Sumrak Уровень 13
18 сентября 2025
не поняла зачем эта тема здесь, если уже дают задачи на несколько разрядов выше может это надо было в начале дать.. че за бред ?
Артём Журавлёв Уровень 13
7 ноября 2025
да ладно, хоть мозг отдохнул) а задачка с методом main вообще повеселила
Anji Уровень 16
12 сентября 2025
Странно спустя половину курса рассказывать про базовые правила синтаксиса. Как по мне, это можно было закинуть в первые уровни примерно в таком же виде для самотренировки новичков
Victoria Уровень 17
5 сентября 2025
Где послушать ультраметалл?) Забористые треки!)
Юлия Уровень 25
3 сентября 2025
"public static void main(String args) Пропущены []" few minutes later "public static void main(String... errors) {" Может я что то не понимаю
Alexey Ulov Уровень 16
30 июля 2025
Я не понимаю, как это решать..
Anonymous #3492314 Уровень 26
21 июля 2025
Да вы прикалываетесь
Georgy Dmitriev Уровень 19
20 июля 2025
обращение к администрации - тут имхо данная тема НЕ нужна, перенесите ее в первые уровня чтоб люди не путались особенно новички
11 сентября 2025
НУЖНА однозначно как разрядка - разгрузка, любому новичку в удовольствие.
4el0vek3 Уровень 36
12 июля 2025
О да! Такие задачи мне по силам
Alexander Pavlyuchenko Уровень 17
11 июля 2025
А вот public static void main(String... errors) { Для меня прям новое открытие 🤔