StringBuilder sb1 = new StringBuilder("Java");
StringBuilder sb2 = new StringBuilder("Java");
Какая проверка окажется true?
StringBuilder sb2 = new StringBuilder("Java");
Какая проверка окажется true?
Anonymous Quiz
11%
if (sb1 == sb2)
57%
if (sb1.equals(sb2))
32%
if (sb1.toString().contentEquals(sb2))
👍9
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
String s4 = s3.intern();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s4);👍7
Что будет выведено на консоль?
Anonymous Quiz
13%
true true true
26%
false false false
37%
true false true
24%
true false false
String str = "I love Java";
str.substring(2, 6);
System.out.println(str);
Что будет выведено на консоль?
Anonymous Quiz
51%
love
3%
Java
32%
I love Java
14%
Ошибка компиляции
👍7🔥2
Java, которой учат. И Java, за которую платят…
Учебный код нужен, чтобы понять идею.
Продакшн-код — чтобы с ним жили годами.
1. Студенту главное, чтобы программа заработала.
В реальном Java-коде важно, как программа будет развиваться дальше: новые требования, новые коллеги.
2. Куча логики в одном методе — нормально для обучения.
В продакшене — маленькие методы, ясные имена, чётко разделённая ответственность.
3. В учебных задачах можно «подогнать» решение под тесты.
В реальной Java — проверки, исключения, валидация, логирование.
4. Учебный код читает привычный ко всему преподаватель.
Нормальный код читают коллеги (и ты сам через год). Поэтому читаемость важнее «хитрого» решения и экономии двух строк.
5. Коллекции, Stream API, ООП, SOLID — не ради галочки,
а чтобы код было легко расширять и безопасно менять.
👉 Опытного Java-разработчика отличает не знание конструкций языка,
а умение писать код, который не страшно открыть снова.
Учебный код нужен, чтобы понять идею.
Продакшн-код — чтобы с ним жили годами.
1. Студенту главное, чтобы программа заработала.
В реальном Java-коде важно, как программа будет развиваться дальше: новые требования, новые коллеги.
2. Куча логики в одном методе — нормально для обучения.
В продакшене — маленькие методы, ясные имена, чётко разделённая ответственность.
3. В учебных задачах можно «подогнать» решение под тесты.
В реальной Java — проверки, исключения, валидация, логирование.
4. Учебный код читает привычный ко всему преподаватель.
Нормальный код читают коллеги (и ты сам через год). Поэтому читаемость важнее «хитрого» решения и экономии двух строк.
5. Коллекции, Stream API, ООП, SOLID — не ради галочки,
а чтобы код было легко расширять и безопасно менять.
👉 Опытного Java-разработчика отличает не знание конструкций языка,
а умение писать код, который не страшно открыть снова.
❤12👍7
Как в Java объявить метод, который будет из исходного массива выбирать отрицательные элементы и формировать из них новый массив?
Anonymous Quiz
9%
public static int* negative(int* arr, int length){ }
24%
public static int[] negative(int[] arr, int length) { }
56%
public static int[] negative(int[] arr) { }
12%
public static void negative(int[] arr) { }
👍5
Integer i1 = 55;
Integer i2 = 55;
Integer i3 = 3000;
Integer i4 = 3000;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
👍2
❤4👍2🙈1
Как преобразовать строку String str = "123"; в целое число k?
Anonymous Quiz
51%
int k = Integer.parseInt(str);
9%
int k = Integer.valueOf(str);
10%
int k = new Integer(str);
30%
Все способы рабочие, но конструктор depricated
👍2
Нужно инициализировать список перечислением элементов, а потом добавить новый объект:
//что здесь?
list.add("Петр"); for (String item : list) { System.out.print(item + " "); } Какой вариант инициализации верный?
//что здесь?
list.add("Петр"); for (String item : list) { System.out.print(item + " "); } Какой вариант инициализации верный?
Anonymous Quiz
24%
List<String> list = Arrays.asList("Aнна", "Олег", "Иван");
20%
List<String> list = List.of("Aнна", "Олег", "Иван");
37%
List<String> list = new ArrayList<>(List.of("Aнна", "Олег", "Иван"));
20%
List<String> list = Stream.of("Aнна", "Олег", "Иван").toList();
👍3
Что раньше: курица или яйцо
ООП или «Прокачай 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