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)
Пропущен 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, и компилировать вашу программу не будет.