
Инструкции import включают базовые пакеты для среды разработки. На скриншоте можно увидеть:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
Сразу за ними идёт объявление класса MainActivity.
public class MainActivity extends AppCompatActivity
Разберём детально, public class означает – создание «класса», глобальной переменной с указанными внутри класса свойствами. Конкретно здесь мы видим создание класса MainActivity на основе (extends) класса AppCompatActivity. AppCompatActivity – класс, написанный разработчиками Android, именно он позволяет поместить в Android наш Java-код. Содержимое кода размещается между двумя фигурными скобками { и }.
Теперь перейдём к вопросу кода внутри скобок.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Over: «над», ride: «поездка», в нашем случае инструкция @Override, говорит о перезаписи свойств класса. Модификатор доступа protected void говорит о защищённом вызове метода OnCreate. Bundle savedInstanceState – значение аргумента Bundle, при начале активности равно нулю, благодаря переменной savedInstanceState.
Мы снова видим открытые скобки с содержимым:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Данные строки указывают на создание пользовательского экрана «Activity».
Идём дальше по коду, который создаёт Android Studio по умолчанию. Обратите внимание на аннотацию @Override — это не просто пометка «для порядка», а инструкция компилятору, которая заставляет его проверить, действительно ли метод onCreate существует в родительском классе AppCompatActivity. Если вы опечатаетесь в названии метода (например, напишете onCreat вместо onCreate), компилятор с аннотацией @Override сразу выдаст ошибку, а без неё опечатка тихо создала бы новый, никогда не вызываемый метод — и разобраться, почему приложение работает не так, как ожидалось, было бы куда сложнее.
Строка super.onCreate(savedInstanceState); заслуживает отдельного объяснения, потому что новичков она обычно ставит в тупик — зачем вызывать родительский метод, если мы его же и переопределяем? Ключевое слово super обращается напрямую к реализации метода в родительском классе AppCompatActivity, минуя переопределение в MainActivity. Дело в том, что базовый класс при создании активности выполняет массу служебной работы — инициализирует внутренние компоненты, восстанавливает состояние интерфейса, настраивает тему оформления — и если убрать вызов super.onCreate(), приложение попросту упадёт с исключением при запуске, потому что необходимая подготовительная работа окажется пропущена.
Метод setContentView(R.layout.activity_main) — это, по сути, мост между Java-кодом и визуальным XML-макетом экрана. R (сокращение от Resources) — это автоматически генерируемый класс, который Android Studio создаёт сама, сканируя папку ресурсов проекта. Каждому файлу разметки, картинке или строковому значению присваивается уникальный числовой идентификатор, а обращение вида R.layout.activity_main позволяет получить этот идентификатор по человекочитаемому имени, не запоминая цифры вручную. Именно поэтому, если удалить файл activity_main.xml из папки res/layout, проект перестанет компилироваться — класс R не сможет сгенерировать для него идентификатор.
Что касается аргумента Bundle savedInstanceState, о котором уже шла речь выше — его практическая польза раскрывается не при первом запуске активности (тогда он действительно равен null), а при повороте экрана или сворачивании приложения. Android может уничтожать и заново создавать активность при таких событиях, и именно через Bundle разработчик может сохранить и восстановить состояние интерфейса — например, текст, который пользователь успел набрать в поле ввода, чтобы он не потерялся при простом повороте телефона.









