1. Пропущено крапку з комою

Найчастіша помилка програмістів-початківців — це крапка з комою. Точніше, її відсутність там, де вона має бути.

Кожна команда всередині методу має закінчуватися крапкою з комою. Крапка з комою — це роздільник команд: таким чином ми вказуємо 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 static 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, і програма не скомпілюється.