Тема 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);
}
}
Что происходит:
- JVM вызывает
mainкак точку входа. - Создаются переменные
xиy. - Вычисляется
sum. - Значение выводится в консоль.
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
Переменная это именованная область для значения.
- Инициализация: первое присваивание.
- Присваивание: изменение текущего значения.
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). Это значит: после создания конкретный строковый объект нельзя изменить, можно только создать новый объект с другим содержимым.
Что важно понять сразу
- Операции вроде
toUpperCase()не меняют исходную строку, а возвращают новую. - Сравнивать строки по содержимому нужно через
equals, а не через==. - При большом количестве склеиваний в цикле лучше использовать
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.
Создание массива
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.
Что отработать после темы
- Написать программу, которая читает массив оценок и считает среднее.
- Сделать сравнение двух строк через
==иequals, увидеть разницу. - Переписать конкатенацию из цикла со
StringнаStringBuilder.
Это базовые навыки, на которых строятся условия, циклы, коллекции и ООП-темы дальше по курсу.