1. Основы Java: Объектно-ориентированное программирование, строгая типизация и управление памятью
Основы Java: Объектно-ориентированное программирование, строгая типизация и управление памятью
Добро пожаловать в курс «Java и Kotlin: Полное погружение и Android-разработка». Мы начинаем наше путешествие с фундамента, на котором строится вся экосистема Android — языка программирования Java. Даже если в будущем вы планируете писать преимущественно на Kotlin, глубокое понимание того, как работает Java «под капотом», сделает вас профессионалом высокого уровня, так как Kotlin полностью совместим с Java и работает на той же виртуальной машине.
В этой статье мы разберем три кита, на которых держится Java: строгую типизацию, объектно-ориентированную парадигму и управление памятью.
Строгая статическая типизация
Java относится к языкам со строгой статической типизацией. Это звучит сложно, но на практике это ваш лучший друг, который спасает от множества ошибок еще до запуска программы.
Что это значит?
Рассмотрим пример:
В языках с динамической типизацией (например, Python или JavaScript) такой код мог бы сработать, но привести к неожиданным ошибкам во время работы приложения. В Java компилятор просто не соберет проект, пока вы не исправите ошибку.
> Строгая типизация — это контракт. Если вы обещали, что функция вернет число, вы обязаны вернуть число. Это делает код предсказуемым и легким для чтения.
Объектно-ориентированное программирование (ООП)
Java — это чистый объектно-ориентированный язык. Здесь практически всё является Объектом. Чтобы понять ООП, нужно усвоить разницу между Классом и Объектом.
Класс и Объект: Теория чертежа
Представьте, что вы архитектор.
* Класс — это чертеж дома. В нем описано, где будут стены, сколько будет окон и какого цвета крыша. Сам по себе чертеж — это просто бумага (или код), в нем нельзя жить. * Объект (или экземпляр) — это реальный дом, построенный по этому чертежу. Вы можете построить по одному чертежу (классу) сотни домов (объектов). У каждого дома будет свой адрес, свои жильцы, но структура у них будет одинаковая.
!Визуализация различия между Классом (чертежом) и Объектом (реализацией).
В коде это выглядит так:
Четыре столпа ООП
Вся мощь Java держится на четырех принципах:
private), чтобы запретить прямой доступ к полям класса, разрешая менять их только через специальные методы.Animal (Животное) с методом eat() (есть), вы можете создать класс Cat (Кошка), который унаследует всё от Animal, но добавит свой метод meow() (мяукать). Это избавляет от дублирования кода.Cat, и Dog могут быть наследниками Animal. Если у Animal есть метод makeSound() (издать звук), то Cat скажет «Мяу», а Dog — «Гав». Но для программы оба они — просто Animal. Это позволяет работать с группой разных объектов одинаковым образом.User для приложения, нам важны его логин и пароль, но не важен цвет его глаз или любимое блюдо. Мы абстрагируемся от лишнего.Управление памятью: Stack и Heap
В языках вроде C++ программист должен вручную выделять и очищать память. В Java этим занимается JVM (Java Virtual Machine), что значительно упрощает жизнь разработчику, особенно в Android.
Память в Java делится на две основные области:
1. Stack (Стек)
Это быстрая оперативная память, работающая по принципу LIFO (Last In, First Out — последним пришел, первым ушел). Здесь хранятся: * Примитивные типы данных (int, boolean, char, double и т.д.) внутри методов.
* Ссылки на объекты.2. Heap (Куча)
Это большое хранилище для всех объектов. Когда вы пишетеnew Car(), сам объект (все его поля и данные) создается в Heap, а в Stack помещается только маленькая ссылка (адрес), указывающая на этот объект в куче.!Схема взаимодействия Стека и Кучи: переменная в стеке хранит ссылку на реальный объект в куче.
Garbage Collector (Сборщик мусора)
Это специальный процесс в Java, который автоматически очищает память. Как он работает?
В Android-разработке понимание этого процесса критически важно. Если вы случайно сохраните ссылку на тяжелый объект (например, на экран приложения) там, где она не должна быть, Сборщик мусора не сможет удалить этот объект. Это называется утечкой памяти (Memory Leak), и это частая причина «тормозов» и вылетов приложений.
Заключение
Java — это язык порядка и структуры. Строгая типизация защищает от глупых ошибок, ООП позволяет строить сложные и масштабируемые системы, а автоматическое управление памятью снимает с разработчика рутину по очистке ресурсов.
В следующей статье мы углубимся в синтаксис и напишем нашу первую полноценную программу, применяя изученные концепции на практике.