Курсы по Java для новичков
675 subscribers
66 photos
1 video
4 files
73 links
Я Оксана Еськова - преподаватель Вуза с 20-летним стажем.
Научу писать код на Java c нуля.
Курсы c автоматической проверкой задач: https://stepik.org/users/23008752
Все вопросы сюда 👉 @aksana_yaskova
Download Telegram
Что будет выведено на консоль?
Anonymous Quiz
35%
A
63%
B
3%
Ошибка компиляции
0%
Runtime Error
Композиция vs наследование в Java
Один из самых частых вопросов при проектировании классов: что выбрать — наследование или композицию?
Оба подхода позволяют переиспользовать код, но делают это по-разному и подходят для разных ситуаций.
🔹 Наследование (Inheritance)
Наследование — это отношение «является» (is-a).
class Animal {
void eat() {
System.out.println("Eating...");
}
}

class Dog extends Animal {
void bark() {
System.out.println("Barking...");
}
}

Здесь Dogявляется Animal. Класс-наследник автоматически получает поведение родителя.
Плюсы:
✔️ Простое повторное использование кода
✔️ Естественно моделирует иерархии
Минусы:
✔️ Жёсткая связность между классами
✔️ Изменения в базовом классе могут ломать наследников
✔️ Ограничение: в Java нет множественного наследования классов
🔹 Композиция (Composition)
Композиция — это отношение «имеет» (has-a).
class Engine {
void start() {
System.out.println("Engine started");
}
}

class Car {
private Engine engine = new Engine();

void start() {
engine.start();
}
}

Car не является Engine, но содержит его.
Плюсы:
✔️ Гибкость (можно менять поведение во время выполнения)
✔️ Лучше подходит для расширяемых систем
Минусы:
✔️ Требует больше кода
🔥 Главное правило - предпочитайте композицию наследованию, если это возможно (Favor composition over inheritance)
Пример сравнения
Через наследование:
class FlyingCar extends Car {
void fly() {}
}

Проблема: машина ≠ самолёт.
Через композицию:
class FlyingAbility {
void fly() {}
}

class Car {
private FlyingAbility flyingAbility;

void fly() {
flyingAbility.fly();
}
}
💡 SOLID-принципы в Java: пишем код, который не ломается через неделю

SOLID — это 5 принципов объектно-ориентированного программирования, которые помогают создавать гибкий, понятный и расширяемый код.

🔹 S — Single Responsibility Principle
Один класс — одна ответственность. Меньше причин для изменения = меньше багов.

🔹 O — Open/Closed Principle
Код открыт для расширения, но закрыт для изменения. Добавляем новое — не ломаем старое.

🔹 L — Liskov Substitution Principle
Наследники должны корректно заменять родительские классы. Без “сюрпризов”.

🔹 I — Interface Segregation Principle
Лучше много маленьких интерфейсов, чем один «жирный».

🔹 D — Dependency Inversion Principle
Зависим от абстракций, а не от конкретных реализаций.

🚀 Итог: SOLID — это не теория ради теории. Это про код, который легче читать, тестировать и поддерживать.

Используешь SOLID — экономишь время себе (и своей команде) в будущем.
3🔥2
Делюсь свежими отзывами о курсе «Основы языка Java».

Спасибо всем, кто находит время их оставить — для меня это действительно очень ценно ❤️
А ещё ваши отзывы помогают другим определиться с траекторией обучения.
⭐️⭐️⭐️⭐️⭐️
Отличный курс, рекомендую всем, кто впервые сталкивается с Java. Так же в курсе содержится полезная информация про JVM (Java Virtual Machine), которая широко распространена в IT. Советую заострить внимание на JVM, полезно получить начальные сведения об этом для общего развития в рамках Computer Science, всем, кто сталкивается с устройством программ, приложений, устройств.
Artur Minnibaev 14 часов назад

 ⭐️⭐️⭐️⭐️⭐️
Отличный курс! Рекомендую всем, кто хочет освоить Основы языка Java с нуля!
Виктор Суглобов 4 дня назад

 ⭐️⭐️⭐️⭐️⭐️ 
Выбрала курс Оксаны Еськовой потому что уже проходила ее курсы по С++ и знала, что все темы будут доступно и подробно объяснены и задачи для закрепления материала интересные, хотя и не всегда даются просто. Так и случилось! Курс очень понравился, прошла его довольно быстро и купила уже остальные ее курсы по Java. И я в предвкушении новых интересных знаний! От всей души благодарю Оксану Ивановну и желаю больших творческих успехов! А тем, кто хочет изучать программирование и получать от этого истинное удовольствие - учитесь на курсах Оксаны Еськовой!
Татьяна Пачина  22 дня назад
int[][] a = {
{10, 20},
{30, 40},
{50, 60}
};

System.out.println(a.length);
System.out.println(a[0].length);
Что выведет программа?
Anonymous Quiz
7%
2 3
65%
3 2
12%
6 2
16%
Ошибка
👍4
int[][] a = new int[2][3];
a[0][1] = 10;
System.out.println(a[1][0]);
👍1
Что будет выведено на консоль?
Anonymous Quiz
8%
Runtime Error
9%
10
32%
0
51%
null
int[][] a = {
{1, 2, 3},
{4, 5, 6}
};
int[] row = a[0];
row[1] = 100;
System.out.println(a[0][1]);
👍1
Что выведет код?
Anonymous Quiz
29%
2
47%
100
6%
0
18%
Runtime error
☕️ Что такое двумерный массив в Java?
В Java двумерный массив — это массив ссылок на одномерные массивы. Поэтому строки можно создавать не сразу, а по мере необходимости:
int[][] arr = new int[3][];

На этом этапе создан только массив из трёх ссылок. Каждая из них пока равна null:
System.out.println(arr[0]); // null

Теперь создадим строки отдельно:
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[3];

Строки могут иметь разную длину, поскольку каждая из них — самостоятельный массив.
Обращение к элементам выполняется привычным способом:
arr[1][2] = 10;
System.out.println(arr[1][2]); // 10

При этом:
arr.length       // количество ссылок на строки
arr[1].length // длина второй строки

⚠️ Если обратиться к элементу строки до её создания, возникнет NullPointerException:
int[][] data = new int[3][];
data[0][0] = 5; // ошибка: data[0] == null
👍6
public class Main {
static void print(long value) {
System.out.println("long");
}

static void print(Integer value) {
System.out.println("Integer");
}

public static void main(String[] args) {
print(10);
}
}
👍1
Что будет выведено на консоль?
Anonymous Quiz
30%
long
37%
Integer
24%
Ошибка компиляции
9%
undefined behavior
👍1
import java.util.Arrays;
class Main {
static void change(int[] array) {
array[0] = 10;
array = new int[]{20, 30};
}

public static void main(String[] args) {
int[] numbers = {1, 2};
change(numbers);
System.out.println(Arrays.toString(numbers));
}
}
3
class Main {
static void show(String value) {
System.out.println("String");
}

static void show(Integer value) {
System.out.println("Integer");
}

public static void main(String[] args) {
show(null);
}
}
👍3
Что будет выведено на консоль?
Anonymous Quiz
27%
String
5%
Integer
32%
null
36%
Возникнет ошибка компиляции
Выучили основы Java и ООП. Что дальше?
Следующий шаг — научиться пользоваться тем, что уже есть в стандартной библиотеке: коллекциями, файлами, Stream API, датами, регулярными выражениями и многим другим.
Именно этому посвящён курс «Прокачай Java» 🚀
Кстати, подоспели свежие отзывы на этот курс:

⭐️⭐️⭐️⭐️⭐️
Отличный курс, как и предыдущие. Особенно пригодились работа с файлами, регулярные выражения, лямбда и стримы. Пройдя все три курса, научился создавать необходимые мне приложения для упрощения работы (работаю инженером).
Кирилл Капитульский 21 час назад

⭐️⭐️⭐️⭐️⭐️
Спасибо большое за понятный и структурированный материал! С нетерпением жду новых курсов по Java. Также было бы интересно пройти от вас курс в части Spring.
Сергей Зубенко вчера
Спасибо всем, кто оставляет отзывы!
👍2