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

Поширені помилки компілятора

Java Syntax Zero
Рівень 12 , Лекція 5
Відкрита

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, і програма не скомпілюється.


Коментарі (17)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
IronMan57 Рівень 1
15 грудня 2024
Моя особиста найчастіша помилка до сьогодняшнього дня - забуваю при оголошені циклу for вказувати тип змінної-лічильника. Мало не до кожного циклу пишу щось на зразок:

for (i = 1; i < array.length; i++)
замість

for (int i = 1; i < array.length; i++)
Стецюра Олег Рівень 32
2 липня 2024
чудова лекція
Гаркін Рівень 14
11 травня 2024
Мені цікаво, де раніше люди зустрічали інформацію, що String... в main це корректно?! А як інакше (без цього знання) задачу №6 можна вирішити?
griotte Рівень 14
12 березня 2024
моя улюблена лекція
28 лютого 2024
Да уж, когда компилятор ТАК матюкается, что не знаю переменных, методов и ваще у Вас тут глубокая Ж..., как ни странно, все решалось ; или ) или } пару строчками выше.
Андрій Рівень 18
8 січня 2024
Не ставте такі тяжкі задачі на 12 рівні)
Anonymous #2979179 Рівень 13
19 вересня 2023
Привіт , поставте краще цей урок на рівнях 1-3 лвл ато початківці завжди це плутають . А той хто сюди дійшов врятлі вже буде щось плутати ну після задач зі 50 і більше як я думаю .
Roma Chernesh Рівень 16
19 січня 2023
Мож хто знає, що це за мови програмування, де не потрібні праві дужки? Бо навіть не знаю, як таке загуглити:)
Maksym Рівень 35
23 січня 2023
Паскаль, Делфі тощо.
Roma Chernesh Рівень 16
23 січня 2023
dankon!
Бородатий Рівень 17
15 грудня 2022
Супер !!! Дали азарту рухатись далі ))
dianosauric Рівень 42
20 вересня 2022
Чому так легко?
Roma Chernesh Рівень 16
19 січня 2023
Щоб трішки підняти настрій учням. Інколи треба посидіти над однією задачею увесь день (щоб розібратися зі складною темою). Але час від часу ото є добре відчути себе мега хацкером, що сходу може 10 задач виконати!