Курсы по Java для новичков
676 subscribers
66 photos
1 video
4 files
73 links
Я Оксана Еськова - преподаватель Вуза с 20-летним стажем.
Научу писать код на Java c нуля.
Курсы c автоматической проверкой задач: https://stepik.org/users/23008752
Все вопросы сюда 👉 @aksana_yaskova
Download Telegram
Повышение цен :(
Друзья, я решила пересмотреть политику цен на курсы по Java:
1) Курс по основам Java сделать бесплатным;
2) А цены на два следующих курса немного повысить. Ничего личного, просто инфляция.
Но у Вас есть три дня до понедельника, чтобы купить эти курсы по старой цене и со скидкой 10%:
Основы объектно-ориентированного программирования на Java
Прокачай Java
👍5🤝5
На чём «застревают» новички при работе с массивами в 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
Что выведет код?
Anonymous Quiz
7%
1 2 3
32%
1 7 3
60%
10 7 3
1%
10 2 3
👍2
Типичная ошибка с наследованием в Java
Что не так с этим кодом?
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?
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 реально облегчает жизнь. И это логичный следующий шаг после ООП.
9👍4🔥2
StringBuilder sb1 = new StringBuilder("Java");
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-разработчика отличает не знание конструкций языка,
а умение писать код, который не страшно открыть снова.
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
Что выведет код?
Anonymous Quiz
22%
false false
28%
true false
5%
false true
45%
true true
4👍2🙈1
👍2
Нужно инициализировать список перечислением элементов, а потом добавить новый объект:
//что здесь?
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