Повышение цен :(
Друзья, я решила пересмотреть политику цен на курсы по Java:
1) Курс по основам Java сделать бесплатным;
2) А цены на два следующих курса немного повысить. Ничего личного, просто инфляция.
Но у Вас есть три дня до понедельника, чтобы купить эти курсы по старой цене и со скидкой 10%:
• Основы объектно-ориентированного программирования на Java
• Прокачай Java
Друзья, я решила пересмотреть политику цен на курсы по Java:
1) Курс по основам Java сделать бесплатным;
2) А цены на два следующих курса немного повысить. Ничего личного, просто инфляция.
Но у Вас есть три дня до понедельника, чтобы купить эти курсы по старой цене и со скидкой 10%:
• Основы объектно-ориентированного программирования на Java
• Прокачай Java
Stepik: online education
Объектно-ориентированное программирование на Java
Окунитесь в мир объектно-ориентированного программирования! Научитесь создавать и использовать классы, разберитесь с принципами ООП и их реализацией в Java, изучите паттерны проектирования приложений.
Если Вы новичок в ООП и к тому же изучаете Java – этот…
Если Вы новичок в ООП и к тому же изучаете Java – этот…
👍5🤝5
На чём «застревают» новички при работе с массивами в Java?
1️⃣ Объявили массив — и сразу обращаются к элементам:
При таком объявлении память под элементы ещё не выделена, поэтому обращаться к
Сначала нужно создать массив через
2️⃣ Выход за границы массива
Индексация в массивах начинается с нуля, поэтому допустимые индексы: 0, 1, 2, 3 (а
Последний элемент массива всегда имеет индекс
размер_массива - 1.
3️⃣ Ожидание копирования элементов при присваивании:
Такое присваивание не копирует массив.
Копируется ссылка, и теперь
Изменения через
💡 Кстати, эти и другие тонкие моменты работы с массивами подробно разбираем в модуле 4 курса «Основы языка Java» 😊
1️⃣ Объявили массив — и сразу обращаются к элементам:
int[] a;
a[0] = 5;
int[] a — это только ссылка на массив, а не сам массив.При таком объявлении память под элементы ещё не выделена, поэтому обращаться к
a[0] нельзя.Сначала нужно создать массив через
new:int[] a = new int[10];
a[0] = 5;
2️⃣ Выход за границы массива
int[] b = new int[4];
b[4] = 7;
Индексация в массивах начинается с нуля, поэтому допустимые индексы: 0, 1, 2, 3 (а
b[4] не существует)Последний элемент массива всегда имеет индекс
размер_массива - 1.
3️⃣ Ожидание копирования элементов при присваивании:
int[] a = new int[8];
int[] b = a;
Такое присваивание не копирует массив.
Копируется ссылка, и теперь
a и b указывают на один и тот же массив.Изменения через
b будут видны и через a.💡 Кстати, эти и другие тонкие моменты работы с массивами подробно разбираем в модуле 4 курса «Основы языка Java» 😊
👍17
Возвращаемся к практике тестов:
int[] a = {1, 2, 3};
int[] b = a;
b[0] = 10;
a[1] = 7;
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}👍2
👍2
Типичная ошибка с наследованием в Java
Что не так с этим кодом?
На первый взгляд — всё корректно. Но задумайтесь:
• Можно ли объект Student передать туда, где ожидается Account?
• А если у студента несколько аккаунтов?
• А если аккаунт есть не только у студентов, но и у преподавателей?
❗️ Проблема здесь не в синтаксисе, а в неверной модели наследования.
Что не так с этим кодом?
class Account {
String login;
String password;
}
class Student extends Account {
String name;
int age;
}На первый взгляд — всё корректно. Но задумайтесь:
• Можно ли объект Student передать туда, где ожидается Account?
• А если у студента несколько аккаунтов?
• А если аккаунт есть не только у студентов, но и у преподавателей?
❗️ Проблема здесь не в синтаксисе, а в неверной модели наследования.
🔥6
Почему нельзя наследовать Student от Account?
Потому что между ними нет отношения
Здесь другое отношение —
В таком случае нужно использовать композицию, а не наследование:
Потому что между ними нет отношения
is-a. Нельзя корректно сказать, что студент является аккаунтом.Здесь другое отношение —
has-a («имеет»): студент имеет аккаунт, но не является им.В таком случае нужно использовать композицию, а не наследование:
class Account {
String login;
String password;
}
class Student {
String name;
int age;
Account account;
}✍11
Свежие отзывы на курс "Объектно-ориентированное программирование на Java". Спасибо всем, кто оставляет отзыв! Для меня это очень важно 🤗
👍10
List<Integer> ints = Arrays.asList(3, 6, 8, 12, 55, 4);
Какой код позволит сформировать массив из элементов этого списка, которые меньше 10?
Какой код позволит сформировать массив из элементов этого списка, которые меньше 10?
Anonymous Quiz
46%
Integer[] numbers = ints.stream().filter(i -> i < 10).toArray();
6%
Integer[] numbers = ints.filter(i -> i < 10).toArray(Integer[]::new);
38%
Integer[] numbers = ints.stream().filter(i -> i < 10).toArray(Integer[]::new);
10%
Integer[] numbers = ints.stream().toArray().filter(i -> i < 10);
👍2👏1
Топ-5 стандартных классов Java, которые реально используют в проектах 👇
🔹 1. ArrayList
Рабочая лошадка. Используется везде, где нужна динамическая коллекция: данные из БД, DTO, результаты вычислений. Быстро и удобно.
🔹 2. HashMap
Хранение пар «ключ–значение»: кэш, конфигурации, группировки, быстрый доступ к данным. Если не знаешь HashMap — на проекте будет боль.
🔹 3. Optional
Спасает от NullPointerException и делает код честнее. Часто используется в сервисах и репозиториях, особенно в современном Java-коде.
🔹 4. LocalDate / LocalDateTime
Работа с датами без боли: планирование, логи, бизнес-логика, дедлайны. Старый Date на проде давно не в почёте.
🔹 5. Stream
Фильтрация, маппинг, агрегация данных в одну строку. Читаемый код и меньше шаблонных циклов — за это стримы любят в командах.
📌 Вывод простой: знание стандартных классов Java реально облегчает жизнь. И это логичный следующий шаг после ООП.
🔹 1. ArrayList
Рабочая лошадка. Используется везде, где нужна динамическая коллекция: данные из БД, DTO, результаты вычислений. Быстро и удобно.
🔹 2. HashMap
Хранение пар «ключ–значение»: кэш, конфигурации, группировки, быстрый доступ к данным. Если не знаешь HashMap — на проекте будет боль.
🔹 3. Optional
Спасает от NullPointerException и делает код честнее. Часто используется в сервисах и репозиториях, особенно в современном Java-коде.
🔹 4. LocalDate / LocalDateTime
Работа с датами без боли: планирование, логи, бизнес-логика, дедлайны. Старый Date на проде давно не в почёте.
🔹 5. Stream
Фильтрация, маппинг, агрегация данных в одну строку. Читаемый код и меньше шаблонных циклов — за это стримы любят в командах.
📌 Вывод простой: знание стандартных классов Java реально облегчает жизнь. И это логичный следующий шаг после ООП.
❤9👍4🔥2
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