Что раньше: курица или яйцо
ООП или «Прокачай Java» ?👀
Само по себе знание принципов ООП недостаточно, чтобы выйти на рынок труда.
Без понимания стандартных библиотек и экосистемы Java в продакшн действительно делать нечего.
Но есть и обратная сторона.
Разобраться в структуре библиотек и сигнатурах методов невозможно, если не понимать базовые идеи ООП:
• что такое классы и интерфейсы?
• как они связаны между собой?
• что означает throws в сигнатуре метода и зачем нужны исключения?
Все эти вопросы неизбежно возникают, если начинать изучение Java-библиотек без фундамента по ООП.
👉 Поэтому после курса «Основы языка Java» я рекомендую начать с
«Основ объектно-ориентированного программирования на Java».
👉 А если с ООП вы уже знакомы — смело переходите к курсу
«Прокачай Java» и погружайтесь в современные инструменты и практики.
И напоминаю: по ссылкам выше действует постоянная скидка 10% для читателей этого телеграм-канала 💙
ООП или «Прокачай Java» ?👀
Само по себе знание принципов ООП недостаточно, чтобы выйти на рынок труда.
Без понимания стандартных библиотек и экосистемы Java в продакшн действительно делать нечего.
Но есть и обратная сторона.
Разобраться в структуре библиотек и сигнатурах методов невозможно, если не понимать базовые идеи ООП:
• что такое классы и интерфейсы?
• как они связаны между собой?
• что означает throws в сигнатуре метода и зачем нужны исключения?
Все эти вопросы неизбежно возникают, если начинать изучение Java-библиотек без фундамента по ООП.
👉 Поэтому после курса «Основы языка Java» я рекомендую начать с
«Основ объектно-ориентированного программирования на Java».
👉 А если с ООП вы уже знакомы — смело переходите к курсу
«Прокачай Java» и погружайтесь в современные инструменты и практики.
И напоминаю: по ссылкам выше действует постоянная скидка 10% для читателей этого телеграм-канала 💙
Stepik: online education
Объектно-ориентированное программирование на Java
Окунитесь в мир объектно-ориентированного программирования! Научитесь создавать и использовать классы, разберитесь с принципами ООП и их реализацией в Java, изучите паттерны проектирования приложений.
Если Вы новичок в ООП и к тому же изучаете Java – этот…
Если Вы новичок в ООП и к тому же изучаете Java – этот…
❤12
//что здесь?
list.add(1);
list.add(2);
for (int i : list) {
System.out.println(i);
}
👍2
Как правильно объявить список, в который можно добавлять целые числа?
Anonymous Quiz
15%
ArrayList<int> list = new ArrayList<>();
3%
ArrayList<double> list = new ArrayList<>();
81%
ArrayList<Integer> list = new ArrayList<>();
1%
ArrayList<String> list = new ArrayList<>();
❤3👍2🤔1
Почему checked exceptions есть в Java — и почти нигде больше 🤔
Когда Java создавали, у неё была большая цель: сделать язык максимально безопасным для крупных корпоративных систем.
Отсюда и идея checked exceptions — если метод может упасть, ты обязан это явно обработать или пробросить дальше.
На бумаге всё красиво:
• ошибки видны в сигнатуре метода
• компилятор не даёт «забыть» про обработку
• API выглядит самодокументируемым
Но практика оказалась суровее.
🔸 throws IOException начинает тянуться через полпроекта (поэтому лучше обрабатывать их на месте);
🔸 появляются try/catch «для галочки»;
🔸 если в метод добавляется новый checked exception, то ломается весь API;
🔸 обработка ошибок превращается в шум, за которым плохо читается основной алгоритм.
Поэтому современные языки (Kotlin, C++, Python, JS) отказались от этой идеи и считают ошибки частью логики, а не синтаксиса.
А Java уже не может просто взять и убрать checked exceptions из-за требований обратной совместимости!
Когда Java создавали, у неё была большая цель: сделать язык максимально безопасным для крупных корпоративных систем.
Отсюда и идея checked exceptions — если метод может упасть, ты обязан это явно обработать или пробросить дальше.
На бумаге всё красиво:
• ошибки видны в сигнатуре метода
• компилятор не даёт «забыть» про обработку
• API выглядит самодокументируемым
Но практика оказалась суровее.
🔸 throws IOException начинает тянуться через полпроекта (поэтому лучше обрабатывать их на месте);
🔸 появляются try/catch «для галочки»;
🔸 если в метод добавляется новый checked exception, то ломается весь API;
🔸 обработка ошибок превращается в шум, за которым плохо читается основной алгоритм.
Поэтому современные языки (Kotlin, C++, Python, JS) отказались от этой идеи и считают ошибки частью логики, а не синтаксиса.
А Java уже не может просто взять и убрать checked exceptions из-за требований обратной совместимости!
😢3
public class Test {
public static void change(int x) {
x = 10;
}
public static void change(Integer x) {
x = 10;
}
public static void main(String[] args) {
int a = 5;
Integer b = 5;
change(a);
change(b);
System.out.println(a);
System.out.println(b);
}
}👍6🤔1
public class Test {
public static void change(int[] arr) {
arr[0] = 10;
arr = new int[]{1, 2, 3};
}
public static void main(String[] args) {
int[] a = {5, 6, 7};
change(a);
System.out.println(a[0]);
}
}👍2
👍3😢2
🧠 В Java нет передачи параметров по ссылке!
После теста с массивом многие делают вывод: «Ну вот же, массив изменился! Значит, он передаётся по ссылке».
На самом деле - нет! В Java все параметры передаются по значению.
Вопрос только в том, что именно является значением.
Посмотрим на код ещё раз. Переменная
✅ Почему arr[0] = 10 работает? Потому что мы меняем содержимое объекта, на который указывает
❌ Почему arr = new int[]{1,2,3} не работает? Потому что это изменение локальной переменной, т.е. копии. И это никак не влияет на переменную
🎯 В Java – всегда передача параметра по значению. Даже для массивов. Даже если очень хочется иначе 🙂
После теста с массивом многие делают вывод: «Ну вот же, массив изменился! Значит, он передаётся по ссылке».
На самом деле - нет! В Java все параметры передаются по значению.
Вопрос только в том, что именно является значением.
Посмотрим на код ещё раз. Переменная
a в main() хранит ссылку на массив. При вызове в метод change() передается копия этой ссылки. Таким образом, arr и a указывают на один и тот же массив.✅ Почему arr[0] = 10 работает? Потому что мы меняем содержимое объекта, на который указывает
arr. Обе ссылки (a и arr) смотрят на один массив → изменения видны снаружи.❌ Почему arr = new int[]{1,2,3} не работает? Потому что это изменение локальной переменной, т.е. копии. И это никак не влияет на переменную
a. После выхода из метода локальная ссылочная переменная просто исчезает.🎯 В Java – всегда передача параметра по значению. Даже для массивов. Даже если очень хочется иначе 🙂
🔥9
public class Main {
void print(long x) {
System.out.println("long");
}
void print(Integer x) {
System.out.println("Integer");
}
public static void main(String[] args) {
Main t = new Main();
t.print(5);
}👍3
Что будет выведено на консоль?
Anonymous Quiz
27%
long
47%
Integer
16%
Ошибка компиляции
9%
Runtime error
👍5
public class Test {
void print(Integer x) {
System.out.println("Integer");
}
void print(String x) {
System.out.println("String");
}
public static void main(String[] args) {
Test t = new Test();
t.print(null);
}
}👍3
Что будет выведено на консоль?
Anonymous Quiz
24%
Integer
15%
String
37%
Ошибка компиляции
24%
Runtime Error
👍4
class Test {
void print(Object x) {
System.out.println("Object");
}
void print(String x) {
System.out.println("String");
}
public static void main(String[] args) {
Test t = new Test();
t.print(null);
}
}👍4
На ту же тему: что будет выведено на консоль?
Anonymous Quiz
33%
Object
33%
String
26%
Ошибка компиляции
7%
Runtime Error
😢1
Завтра 14 февраля — день любви...
Кто-то признаётся людям. А я признаюсь… Java.💥💥💥
Потому что:
• она строгая, но справедливая
• если что-то не компилируется — значит, я правда ошиблась
• она учит думать
И что самое романтичное? Она не терпит неопределённости.
Либо
Кстати, Степик затеял “Тиндер курсов”. Может, это поможет встретиться с теми самыми знаниями, о которых Вы всегда мечтали 😊
Кто-то признаётся людям. А я признаюсь… Java.💥💥💥
Потому что:
• она строгая, но справедливая
• если что-то не компилируется — значит, я правда ошиблась
• она учит думать
И что самое романтичное? Она не терпит неопределённости.
Либо
true, либо false. Без токсичных «почти». ❤️Кстати, Степик затеял “Тиндер курсов”. Может, это поможет встретиться с теми самыми знаниями, о которых Вы всегда мечтали 😊
Telegram
Stepik – онлайн-курсы
Середина февраля — время любви. Но не только к другим, а и к себе: к своим интересам, планам и тому, каким человеком вы хотите стать дальше. 🔈
Пока за романтический мэтч отвечают другие приложения, команда Stepik предлагает то, что точно поддержит вас надолго:…
Пока за романтический мэтч отвечают другие приложения, команда Stepik предлагает то, что точно поддержит вас надолго:…
❤6
💡 Итог: правила передачи null в метод
•
•
• если есть несколько не связанных ссылочных типов – неоднозначность и ошибка компиляции!
•
null можно передать в любой ссылочный тип, но нельзя передать в примитивный параметр•
компилятор всегда выбирает самый специфичный тип. Если есть переменная суперкласса и подкласса, то выбирается подкласс.• если есть несколько не связанных ссылочных типов – неоднозначность и ошибка компиляции!
❤2🔥1
class Parent {
static void print() {
System.out.println("Parent");
}
}
class Child extends Parent {
static void print() {
System.out.println("Child");
}
}
public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.print();
}
}🔥7
public class Test {
static void hello() {
System.out.println("Static hello");
}
void hello(int x) {
System.out.println("Instance hello");
}
public static void main(String[] args) {
Test t = null;
t.hello();
}
}🔥3
Что будет выведено на консоль?
Anonymous Quiz
46%
Static hello
9%
Instance hello
25%
NullPointerException
20%
Ошибка компиляции