Логотип Workflow

Article

Fundamental Programming Structures

Тема 3. Fundamental Programming Structures in Java

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

A Simple Java Program

Начнем с простого примера и разберем его по шагам.

public class Demo {
    public static void main(String[] args) {
        System.out.println("Start");

        int x = 10;
        int y = 5;
        int sum = x + y;

        System.out.println(sum);
    }
}

Что происходит:

  1. JVM вызывает main как точку входа.
  2. Создаются переменные x и y.
  3. Вычисляется sum.
  4. Значение выводится в консоль.

Comments

Комментарии помогают объяснять намерение и ограничения. В Java есть 3 вида комментариев.

1. Однострочный комментарий

// Используем UTC, чтобы избежать разницы по часовым поясам
Instant now = Instant.now();

2. Многострочный комментарий

/*
 Проверка legacy-правила:
 id должен содержать ровно 8 символов
*/
boolean valid = id.length() == 8;

3. Documentation comment (Javadoc)

/**
 * Возвращает цену с учетом скидки.
 * @param amount исходная сумма
 * @param percent скидка в процентах
 * @return итоговая сумма после скидки
 */
public double applyDiscount(double amount, double percent) {
    return amount - amount * percent / 100.0;
}

Практическое правило:

  • Пишите комментарий, когда без него неочевидно «почему так».
  • Не пишите комментарий, который просто повторяет код.

Плохо:

// Увеличиваем i на 1
i++;

Хорошо:

// Смещаемся на следующую запись, первая строка содержит заголовок
i++;

Data Types

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

  • Примитивные типы: int, long, double, boolean, char.
  • Ссылочные типы: String, массивы, классы, интерфейсы.
int age = 20;
String name = "Alex";

age хранит значение напрямую, name хранит ссылку на объект строки.

Variables, Assignments and Initializations

Переменная это именованная область для значения.

  • Инициализация: первое присваивание.
  • Присваивание: изменение текущего значения.

Variable box

int balance = 100;   // инициализация
balance = balance + 50; // присваивание
System.out.println(balance);

Результат:

150

Operators

Основные группы операторов:

  • Арифметические: +, -, *, /, %.
  • Сравнение: ==, !=, >, <, >=, <=.
  • Логические: &&, ||, !.
int age = 20;
boolean canBuy = age >= 18 && age < 65;
System.out.println(canBuy);

String

String в Java это тип данных для хранения текста: имени пользователя, email, сообщения, URL, пути к файлу и любого другого набора символов.

Строка это последовательность символов в определенном порядке. Например:

String name = "Alex";
String city = "Prague";
String message = "Hello, world!";

Практически любой ввод/вывод в приложении работает со строками: данные из формы, JSON, параметры запроса, логи, тексты ошибок.

String в Java является объектом и при этом неизменяем (immutable). Это значит: после создания конкретный строковый объект нельзя изменить, можно только создать новый объект с другим содержимым.

Что важно понять сразу

  1. Операции вроде toUpperCase() не меняют исходную строку, а возвращают новую.
  2. Сравнивать строки по содержимому нужно через equals, а не через ==.
  3. При большом количестве склеиваний в цикле лучше использовать StringBuilder.

Пример 1. Неизменяемость

String s = "java";
String upper = s.toUpperCase();

System.out.println(s);     // java
System.out.println(upper); // JAVA

Пример 2. Сравнение строк

String a = "test";
String b = new String("test");

System.out.println(a == b);        // false (сравнение ссылок)
System.out.println(a.equals(b));   // true  (сравнение содержимого)

Пример 3. Конкатенация в цикле

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 3; i++) {
    sb.append(i).append(" ");
}
String result = sb.toString();
System.out.println(result); // 1 2 3 

Arrays

Массив (array) это фиксированная последовательность элементов одного типа.

  • Все элементы одного типа.
  • Длина задается при создании и не меняется.
  • Индексация начинается с 0.

Array memory

Создание массива

int[] scores = {90, 75, 88};

Доступ к элементу

System.out.println(scores[1]);

Результат:

75

Изменение элемента

scores[1] = 80;
System.out.println(scores[1]);

Результат:

80

Безопасный обход массива

for (int i = 0; i < scores.length; i++) {
    System.out.println(scores[i]);
}

Если обратиться к индексу вне диапазона 0..length-1, получите ArrayIndexOutOfBoundsException.

Что отработать после темы

  1. Написать программу, которая читает массив оценок и считает среднее.
  2. Сделать сравнение двух строк через == и equals, увидеть разницу.
  3. Переписать конкатенацию из цикла со String на StringBuilder.

Это базовые навыки, на которых строятся условия, циклы, коллекции и ООП-темы дальше по курсу.

Quiz

Проверьте, что вы усвоили

Авторизуйтесь чтоб пройти тесты