Курсы по Java для новичков
675 subscribers
66 photos
1 video
4 files
73 links
Я Оксана Еськова - преподаватель Вуза с 20-летним стажем.
Научу писать код на Java c нуля.
Курсы c автоматической проверкой задач: https://stepik.org/users/23008752
Все вопросы сюда 👉 @aksana_yaskova
Download Telegram
Скоро-скоро весенне-летняя распродажа курсов на Степике!
✔️С 27 мая по 9 июня на все мои курсы будет скидка 20%. Если хотите добавить себе новые знания и навыки – это само время!
✔️Курсы выстроены в логическую цепочку: “Основы языка Java” -> “Объектно – ориентированное программирование на Java” -> “Прокачай Java”.
👌В итоге – знания Java Core на уровне junior . Как видите, звезд с неба и позицию senior не обещаю. Но твердую базу для дальнейшего развития – да!
2
class Test {
static int x = 5;

static void change(int x) {
x = x + 10;
}

public static void main(String[] args) {
change(x);
System.out.println(x);
}
}
Что будет выведено на консоль?
Anonymous Quiz
35%
5
46%
15
2%
10
17%
Ошибка компиляции
Вчера стартовала летняя распродажа на Stepik 🔥
Если давно хотели прокачать навыки по Java — сейчас хороший момент: до 9 июня на платформе действуют скидки на множество курсов по программированию.
Мои курсы тоже участвуют 🙌
Co скидкой 20% (самой большой в году!) можно приобрести:

— “Основы языка Java” – курс для полных новичков в этом языке;
— “Объектно – ориентированное программирование на Java” – следующий курс, который научит понимать принципы ООП и воплощать их в своем коде;
— “Прокачай Java” – курс, который завершает линейку изучения Java Core. Он посвящен изучению стандартных классов, а также современным возможностям Java.
👍4
И да, забыла самое выгодное: программы курсов:
— "Java Core: программа курсов" - включает все три моих курса по Java;
— "Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]" - мастхев Java-разработчика.
👍4
class Test {
static int x = 10;
static {
x = 20;
}
public static void main(String[] args) {
System.out.println(x);
}
}
Что будет выведено на консоль?
Anonymous Quiz
29%
10
61%
20
0%
0
10%
Runtime Error
👏4
class Test {
static int x = 10;

static void print() {
System.out.println(x);
}
}

public class Main {
public static void main(String[] args) {
Test t = null;
t.print();
}
}
👍5
class Test {
static int x = 10;

static void print() {
int x = 5;
System.out.println(this.x);
}

public static void main(String[] args) {
print();
}
}
3
Что будет выведено на консоль?
Anonymous Quiz
31%
10
42%
5
22%
Ошибка компиляции
4%
Runtime Error
👍2
💡 Статические члены класса в Java — зачем они?
static — это то, что относится не к объекту, а к классу в целом.
🔹 Статические поля — общие для всех объектов
Например, счётчик созданных экземпляров.
🔹 Статические методы — можно вызывать без создания объекта
Классический пример — Math.random().
📌 Основные правила:
• К статическим членам обращаются через имя класса;
• Статический метод не имеет доступа к полям экземпляра напрямую;
• В статическом методе нельзя использовать this;
• Нестатические методы могут обращаться к статическим членам;
• Статические поля инициализируются при первом использовании класса (создание объекта или обращение к static);
• Вызов через объект (obj.method()) допустим, но фактически компилятор заменяет его на вызов через класс.
⚠️ Важно: статические методы нельзя переопределять (override), только скрывать (hide).
Коротко:
static = один на всех 👨‍👩‍👧‍👦
👍6
Заметили? Степик обновил интерфейс задач на программирование…
Как Вам? Мне вообще-то больше нравился старый вариант. Но я известный ретроград 😊
А я напоминаю: распродажа Степика завершится 9 июня. А потом летний застой и повышение цен к осени ☹️. Не только у меня, а вообще.
Задумайтесь: может, стоит запастить курсам впрок?
Если что, ссылки на мои курсы тут:
Основы языка Java
Объектно-ориентированное программирование на Java
Прокачай Java
Java Core: программа курсов
Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]
💡 Какие самые частые вопросы на собеседовании по ООП?
🔥 1. База ООП (самое любимое у интервьюеров)
Практически обязательный вопрос:
👉 Абстракция, инкапсуляция, наследование, полиморфизм
Важно не просто знать определения, а уметь объяснить: где это используется в реальном коде, зачем это нужно, и как помогает проектировать системы
⚙️ 2. Интерфейс vs абстрактный класс
Когда использовать интерфейс, а когда абстрактный класс? Можно ли заменить одно другим?
🔁 3. Overloading vs Overriding
Любят задавать каверзные примеры с выводом кода.
🧠 4. Полиморфизм на практике
Где ты его реально использовал в проекте (или учебных задачах)?
🧩 5. Композиция vs наследование
Частый вопрос для более сильных кандидатов:
почему композиция часто лучше наследования
как уменьшить связанность кода
📦 6. Бонус: SOLID-принципы
Не всегда требуют глубоко, но почти гарантированно всплывают.
💬 А какие темы разобрать в отдельных постах?
5👍2
🧠 База ООП: зачем это вообще нужно?
ООП помогает снизить сложность разработки и строить системы, которые можно развивать годами:
✔️ менять код без боли
✔️ переиспользовать логику
✔️ делить систему на понятные части
✔️ масштабировать проект без хаоса
✔️ не сойти с ума от растущей сложности
🔹 Абстракция
Мы описываем объект через главное, убирая лишние детали.
Например: Car — это не набор болтов и проводов, а поведение машины: поехала, остановилась, заправилась.  
💡 В коде это понятные методы, часто собранные в  интерфейсы.
🔹 Инкапсуляция
Мы скрываем внутреннее устройство объекта и даём управляемый доступ к данным.
Например, поле balance нельзя менять напрямую — только через методы deposit() / withdraw().
💡 Это защищает данные от некорректного использования и позволяет менять внутреннюю реализацию класса, не затрагивая код, который его использует.
🔹 Наследование
Позволяет переиспользовать уже существующую логику и расширять её.
class Animal { }
class Dog extends Animal { }
💡 Это экономит время разработки и позволяет сосредоточиться на новых возможностях, а не переписывать базовое поведение.
🔹 Полиморфизм
Один интерфейс — разные реализации. В коде это означает: один и тот же вызов метода может работать по-разному в зависимости от объекта, который его реализует.
Shape s = new Circle();
s.draw();
💡 Это позволяет писать универсальный код на уровне абстракций и хранить разные объекты в одной коллекции.
👍42🔥1
💡 Интерфейс vs абстрактный класс
Когда что использовать и можно ли одно заменить другим?

На первый взгляд кажется, что интерфейс и абстрактный класс — это почти одно и то же:
объекты нельзя создать напрямую, оба задают «контракт» для других классов.

Но разница есть — и она принципиальная 👇

🔹 Интерфейс — описывает поведение, не заботясь о реализации.
Один и тот же интерфейс могут реализовать неродственные классы (например, Flyable для птицы и самолёта).
Класс может реализовать несколько интерфейсов — это ключевое преимущество, которое частично заменяет множественное наследование (например, в C++).

👉 Используй интерфейс, когда:
• нужно задать контракт без привязки к реализации
• класс должен поддерживать несколько ролей
(например: Serializable, Comparable, Runnable)

🔹 Абстрактный класс может содержать поля и методы — как реализованные, так и абстрактные.
Если класс наследуется от абстрактного класса, он не может быть наследником другого класса.

👉 Используй абстрактный класс, когда:
• есть общая базовая реализация и классы тесно связаны между собой
• нужно переиспользовать код базового класса
(например, Shape для всех фигур)

🔥 Идеально — комбинировать оба подхода
(абстрактный класс + интерфейсы для расширения поведения)
🔥4👍2
🔥 Overloading vs Overriding в Java — не путай!
Частый вопрос на собеседованиях и база ООП. Разберёмся быстро 👇
🧩 Overloading (перегрузка)
Это когда в одном классе несколько методов с одинаковым именем, но разными параметрами (разные сигнатуры).
📌 Решается на этапе компиляции
class MathUtils {

int sum(int a, int b) {
return a + b;
}

double sum(double a, double b) {
return a + b;
}

int sum(int a, int b, int c) {
return a + b + c;
}
}

🧬 Overriding (переопределение)
Подкласс меняет поведение метода родителя.
Имя и параметры — те же.
📌 Решается во время выполнения (runtime) → полиморфизм
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}

class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}

Использование:
Animal a = new Dog();
a.makeSound(); // Bark

💡 Как запомнить:
Overloading — много методов с одним именем
Overriding — меняем поведение метода в наследнике
2🔥1
class A {
void print(int x) {
System.out.println("A int");
}
}

class B extends A {
void print(double x) {
System.out.println("B double");
}
}

public class Main {
public static void main(String[] args) {
A obj = new B();
obj.print(5);
}
}
Что будет выведено на консоль?
Anonymous Quiz
38%
A int
41%
B double
18%
Ошибка компиляции
3%
Runtime Error
👍3
class A {
void show() {
System.out.println("A");
}
}

class B extends A {
void show() {
System.out.println("B");
}
}

public class Main {
public static void main(String[] args) {
A obj = new B();
obj.show();
}
}
👍2