← Назад к курсу

Бесплатный пробный урок: Java Developer

Пройдите пару настоящих уроков этого курса — регистрация не требуется.

01

Урок 1: Переменные, типы данных и операторы

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

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

Первая программа на Java

Давайте рассмотрим первый простой пример программы на Java:

Main.java
public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a + b);
    }
}
Output:30
JAVA
Результат

При запуске данного кода мы создаём два числа: a и b. Переменная a равна 10, а переменная b равна 20. Затем мы выводим их сумму:

a + b = 10 + 20 = 30

Команда System.out.println(a + b); выводит результат в консоль.

Структура Java-программы

Если разобрать программу, которую мы написали выше, то мы видим, что она начинается с ключевых слов: public class Main.

Это означает, что мы создаём класс под названием Main. Причём название класса должно быть один в один одинаковым с названием файла исходного кода.

Если файл называется Main.java, то класс должен называться Main. Если файл называется Hello.java, то класс должен называться Hello.

Например, если вы решили назвать файл Hello.java, то код будет выглядеть так:

Hello.java
public class Hello {
    public static void main(String[] args) {
        ...
    }
}

Далее мы видим фигурные скобки { }. Они открывают и закрывают блок кода. В Java очень важно следить за тем, чтобы каждая открытая скобка была закрыта.

Внутри класса мы создаём главный метод программы: public static void main(String[] args). Именно с этого метода начинается выполнение Java-программы.

Базовая структура:

public class Main {
    public static void main(String[] args) {

        // Здесь пишется алгоритм программы

    }
}

Тему методов мы рассмотрим немного позже. Пока самое главное запомнить: любая Java-программа запускается с метода main.

Вывод текста в консоль

Для вывода данных в консоль мы используем команду System.out.println().

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello BITLAB");
    }
}
Output:Hello BITLAB
JAVA
Результат

Обратите внимание, что в конце каждого выражения мы ставим точку с запятой: ;. Она означает, что выражение завершено.

02

Урок 2: Условные операторы

В повседневной жизни мы очень часто применяем условия. Например, мы просыпаемся и начинаем завтракать. Если чайник вскипел, то мы отключаем его. Если ещё нет, то ждём, пока он не вскипит. Мы начинаем одеваться и идём на работу. Если мы опаздываем, то заказываем такси; иначе, не спеша, идём пешком минут 25. Если после работы мы голодны, то идём ужинать. Если дома нет еды, то мы заказываем. Так можно до бесконечности прописывать алгоритм условий нашей жизни.

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

Условия if

Например, я ввожу число. Если это число больше 10, то я вывожу текст "YES":

Main.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.println("Insert number:");
        int a = in.nextInt();

        if (a > 10) {
            System.out.println("YES");
        }

        System.out.println("Program ended");
    }
}
Input:20
Output:YES Program ended
Input:5
Output:Program ended
JAVA
Результат

Как работает данный код?

Во-первых, мы создаём целое число int a, значение которого вводим через консоль. Затем мы создаём проверку условия при помощи обычного оператора сравнения >, то есть больше.

Ключевое слово if означает «если». Если a > 10, то программа входит в блок кода внутри фигурных скобок. Если условие неверное, программа пропускает этот блок и продолжает выполнение дальше.

Как вы заметили, проверка условия всегда выдаёт один из двух результатов: true — истина, или false — ложь.

Условия с несколькими проверками

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

Main.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.println("Insert number:");
        int a = in.nextInt();

        if (a > 10 && a < 20) {
            System.out.println("YES");
        }

        System.out.println("Program ended");
    }
}
JAVA
Результат

Как видно на примере, мы используем двойной символ амперсанда — &&. Этот символ означает логическое «И».

Если я введу число 15, то оно окажется между 10 и 20, так как 15 меньше 20 и при этом больше 10. В случае, если я введу 25, то условие «больше 10» выдаст true, но условие «меньше 20» выдаст false, так как 25 не меньше 20. Таким образом, если я введу 25, то я перепрыгну блок условия.

Ниже приведена таблица логических операторов с их объяснениями:

Оператор Описание Пример
&& Логический И 10 > 5 && 20 <= 40 будет TRUE
|| Логический ИЛИ 5 == 3 || 30 < 20 будет FALSE
! Логический НЕ 5 != 5 будет FALSE
03

Урок 3: Циклы: while и for

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

Для таких задач в Java используются циклы. Цикл позволяет не писать один и тот же код снова и снова, а описать повторение один раз.

Зачем нужны циклы?

Представьте себе такую ситуацию. Вы хотите запустить процесс, который повторяется периодически до определённого момента. Например, вывести слово "Hello BITLAB" 10 раз.

Без циклов это будет выглядеть таким образом:

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
        System.out.println("Hello BITLAB");
    }
}
Output:Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB
JAVA
Результат

Такой код работает, но он неудобный. А теперь представьте себе, что мы захотим вывести этот же текст 100 раз. Сложновато, согласны?

В таком случае вам нужно будет 100 раз написать: System.out.println("Hello BITLAB");. А если вдруг мы захотим изменить текст, то придётся менять его во многих местах.

Главная идея циклов: написать повторяющееся действие один раз и указать Java, сколько раз или до какого момента его нужно повторять.

С циклами всё меняется. Код становится короче, понятнее и удобнее для изменения.

Цикл while

Данную задачу, по выводу текста "Hello BITLAB" 10 раз, можно сократить таким образом:

Main.java
public class Main {
    public static void main(String[] args) {
        int i = 0;

        while (i < 10) {
            System.out.println("Hello BITLAB");
            i = i + 1;
        }
    }
}
Output:Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB Hello BITLAB
JAVA
Результат

Смысл здесь заключается в том, что цикл while выполняет проверку, как обычное условие if.

Если условие верное, выполняется блок кода. Если условие неверное, блок кода пропускается. Главное отличие цикла while заключается в том, что после выполнения блока он возвращается обратно к проверке условия.

Цикл while читается так: пока условие верное — выполняй этот блок кода.

Таким образом, цикл while будет выполняться до тех пор, пока условие i < 10 остаётся верным.

Как работает while шаг за шагом?

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

  • Создаём переменную int i = 0;
  • Проверяем условие i < 10
  • Если условие верное, выводим "Hello BITLAB"
  • Увеличиваем i на 1
  • Снова возвращаемся к проверке условия

На каждом шаге значение переменной i увеличивается:

i = 0 → i = 1 → i = 2 → i = 3 → ... → i = 10

Когда i станет равным 10, условие i < 10 станет ложным, потому что 10 уже не меньше 10. После этого цикл завершится.

04

Урок 4: Массивы

В программировании очень часто нужно хранить не одно значение, а сразу несколько значений одного типа. Например, в BITLAB ACADEMY у нас может быть группа студентов, и у каждого студента есть результат экзамена.

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

Проблема без массива

Рассмотрим случай, когда вы хотите сохранить результаты экзаменов для 5 студентов в группе и распечатать их сумму и среднее значение. Обычно вы можете создать в своей программе 5 переменных типа double и работать с ними.

Main.java
public class Main {
    public static void main(String[] args) {
        double sc1 = 100;
        double sc2 = 90;
        double sc3 = 95;
        double sc4 = 80;
        double sc5 = 75;

        double total = sc1 + sc2 + sc3 + sc4 + sc5;
        double average = total / 5;

        System.out.println("Total score : " + total);
        System.out.println("Average score : " + average);
    }
}
Output:Total score : 440.0 Average score : 88.0
JAVA
Результат

Как вы видите с примера, мы создали 5 переменных double для баллов каждого студента, и посчитали сумму со средним значением.

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

А если в группе будет не 5 студентов, а 100 студентов? Тогда создавать переменные sc1, sc2, sc3 и так далее вручную будет очень неудобно.

Для решения такого рода проблем нам нужно хранить данные о баллах студентов в одной структуре. И тут к нам на ум приходят — массивы.

Что такое массив?

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

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

В языке Java массив удобен для работы с большим количеством однотипных данных. Например, если все значения являются оценками студентов, мы можем хранить их в одном массиве типа double.

Одним словом, если переменная — это одноместный мотоцикл, то массив — это автобус, куда можно поместить кучу переменных, то есть пассажиров.

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

double scores[] = {100, 90, 95, 80, 75};

Теперь все 5 результатов находятся не в отдельных переменных, а внутри одного массива с названием scores.

Как выглядит массив внутри?

У каждого элемента массива есть свой номер, который называется индекс. Самое важное правило: в Java индексы массива начинаются с 0.

  • scores[0] = 100
  • scores[1] = 90
  • scores[2] = 95
  • scores[3] = 80
  • scores[4] = 75

Получается, если в массиве 5 элементов, то индексы будут не от 1 до 5, а от 0 до 4.

Первый элемент массива — scores[0]. Последний элемент массива из 5 элементов — scores[4].

Если вы попробуете обратиться к scores[5], программа выдаст ошибку, потому что элемента с таким индексом в массиве нет.