Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍3✍1
Что обязательно переопределить вместе с equals() для корректной работы в HashSet/HashMap?
Anonymous Quiz
0%
clone()
5%
compareTo()
92%
hashCode()
0%
finalize()
3%
Посмотреть ответ
✍2👍2🎉2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3💯2
Что “получаешь из коробки”, объявляя record Point(int x, int y)?
Anonymous Quiz
6%
Только геттеры
7%
Только конструктор
14%
Полный сет геттеров/сеттеров
54%
equals, hashCode, toString и геттеры-компоненты
20%
Посмотреть ответ
✍3👍2🎉2
ООП, Полиморфизм в Java простыми словами. Часть 1.
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем @Override. Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
✅ JavaStart. Подписаться
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем @Override. Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3✍2💯2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4😁4👨💻2👍1
Что напечатает код выше?
Anonymous Quiz
35%
"1"
24%
"null"
8%
Пустую строку
23%
Будет Exception
10%
Посмотреть ответ
✍4👍3🎉1
🔍 Ответ на задачу про исключение в стримах Java!
При выполнении данного кода возникнет исключение NullPointerException.
Давайте разберём, почему это происходит 🤔
Проблема возникает в строчке findFirst(). Метод .map(Fee::getDescription) создаёт стрим, где первый элемент имеет значение null из-за description равного null в объекте Fee.
Когда findFirst() пытается вернуть найденное значение — а это null — метод Optional.of() выбрасывает NullPointerException, поскольку Optional.of() не позволяет обёртывать null значениями. Для обработки null значений нужно использовать Optional.ofNullable().
Чтобы исправить это и избежать исключения, можно немного изменить этот код:
String s = fees.stream()
.map(Fee::getDescription)
.filter(Objects::nonNull) // добавляем этот фильтр
.findFirst()
.orElse("1");
Этот код сначала фильтрует все null значения из стрима и предотвращает NullPointerException.
✅ JavaStart. Подписаться
При выполнении данного кода возникнет исключение NullPointerException.
Давайте разберём, почему это происходит 🤔
public static class Fee {
private String description;
public Fee(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public static void main(String[] args) {
List<Fee> fees = List.of(new Fee(null));
String s = fees.stream()
.map(Fee::getDescription)
.findFirst()
.orElse("1");
System.out.println(s);
}Проблема возникает в строчке findFirst(). Метод .map(Fee::getDescription) создаёт стрим, где первый элемент имеет значение null из-за description равного null в объекте Fee.
Когда findFirst() пытается вернуть найденное значение — а это null — метод Optional.of() выбрасывает NullPointerException, поскольку Optional.of() не позволяет обёртывать null значениями. Для обработки null значений нужно использовать Optional.ofNullable().
Чтобы исправить это и избежать исключения, можно немного изменить этот код:
String s = fees.stream()
.map(Fee::getDescription)
.filter(Objects::nonNull) // добавляем этот фильтр
.findFirst()
.orElse("1");
Этот код сначала фильтрует все null значения из стрима и предотвращает NullPointerException.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍2👍2🔥1👨💻1
ООП, Полиморфизм в Java простыми словами. Часть 2. Перегрузка методов.
Рассмотрим на практическом примере как проявляется полиморфизм, а потом снова вернемся к его определению.
Полиморфизм часто часто описывают фразой: Один интерфейс - много методов.
Но что это значит? Как проявляется полиморфизм?
Дело в том, что если бы в Java не было принципа полиморфизма, компилятор бы интерпретировал код на Картинке 1 как ошибку.
Как видите, методы на картинке отличаются значениями, которые они принимают:
первый принимает int, а второй принимает short.
Однако, поскольку в Java используется принцип полиморфизма (один из принципов ООП), компилятор не будет воспринимать это как ошибку, потому что такие методы будут считаться разными (Картинка 1).
Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt()), чем по одному отдельному названию на этот же метод, написанный для каждого типа (Картинка 2).
Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать!
Это предполагает, что мы можем заполнить одно название (один интерфейс), по которому мы сможем обращаться к нескольким методам, меняя лишь аргументы.
Теперь Вы можете понять, почему часто этот принцип описывают фразой: Один интерфейс - много методов.
Перегрузка методов.
То, что показано выше - несколько методов с одним названием и разными параметрами - называется перегрузкой методов.
Все это - проявления "повышенной гибкости" объектно-ориентированного языка Java благодаря полиморфизму.
✅ JavaStart. Подписаться
Рассмотрим на практическом примере как проявляется полиморфизм, а потом снова вернемся к его определению.
Полиморфизм часто часто описывают фразой: Один интерфейс - много методов.
Но что это значит? Как проявляется полиморфизм?
Дело в том, что если бы в Java не было принципа полиморфизма, компилятор бы интерпретировал код на Картинке 1 как ошибку.
Как видите, методы на картинке отличаются значениями, которые они принимают:
первый принимает int, а второй принимает short.
Однако, поскольку в Java используется принцип полиморфизма (один из принципов ООП), компилятор не будет воспринимать это как ошибку, потому что такие методы будут считаться разными (Картинка 1).
Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt()), чем по одному отдельному названию на этот же метод, написанный для каждого типа (Картинка 2).
Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать!
Это предполагает, что мы можем заполнить одно название (один интерфейс), по которому мы сможем обращаться к нескольким методам, меняя лишь аргументы.
Теперь Вы можете понять, почему часто этот принцип описывают фразой: Один интерфейс - много методов.
Перегрузка методов.
То, что показано выше - несколько методов с одним названием и разными параметрами - называется перегрузкой методов.
Все это - проявления "повышенной гибкости" объектно-ориентированного языка Java благодаря полиморфизму.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2
Можно ли переопределить статический метод?
Чтобы правильно ответить на данный вопрос нужно понимать, что перегрузка метода и его переопределение – это разные понятия.
Сначала рассмотрим перегрузку.
Компилятор Java рассматривает методы с отличающимися параметрами как разные, поэтому не существует никаких ограничений.
Статические методы действуют на весь класс, а не к его экземплярам, здесь применяется статическое связывание, а значит, переопределить данный метод в дочернем классе невозможно.
Однако в дочернем классе не запрещено объявлять static-метод с теми же параметрами. Такая конструкция в Java называется перекрытие. В этом методе запрещено указывать слово super и аннотацию @Override.
class Base {
static void prntMe() {
System.out.prntln("Base!");
}
}
class Child extends Base {
static vod printMe() {
System.out.prntln("Child!");
}
}
Base instance = new Child();
instance.printMe(); // Хоть объект и Child, напечатается "Base!"
✅ JavaStart. Подписаться
Чтобы правильно ответить на данный вопрос нужно понимать, что перегрузка метода и его переопределение – это разные понятия.
Сначала рассмотрим перегрузку.
Компилятор Java рассматривает методы с отличающимися параметрами как разные, поэтому не существует никаких ограничений.
Статические методы действуют на весь класс, а не к его экземплярам, здесь применяется статическое связывание, а значит, переопределить данный метод в дочернем классе невозможно.
Однако в дочернем классе не запрещено объявлять static-метод с теми же параметрами. Такая конструкция в Java называется перекрытие. В этом методе запрещено указывать слово super и аннотацию @Override.
class Base {
static void prntMe() {
System.out.prntln("Base!");
}
}
class Child extends Base {
static vod printMe() {
System.out.prntln("Child!");
}
}
Base instance = new Child();
instance.printMe(); // Хоть объект и Child, напечатается "Base!"
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4👍3✍2
Методы/функции в Java простыми словами.
Это важные концепции, которые позволяют нам создавать более организованный и масштабируемый код.
Что такое методы/функции?
Методы (или функции) - это блоки кода, которые могут выполнять определенные действия и возвращать результаты. Они позволяют нам изолировать определенные задачи в отдельные блоки, делая код более читаемым и легко управляемым.
Создание методов.
Давайте посмотрим, как создать метод в Java:
public int multiply(int a, int b) {
int result = a * b;
return result;
}
В этом примере мы создали метод multiply, который принимает два аргумента a и b и возвращает их произведение.
У метода есть модификатор доступа, название, аргументы в скобках, тип возвращаемого значения, тело метода.
Использование методов.
Вызвать метод можно следующим образом:
int x = 5;
int y = 3;
int product = multiply(x, y);
// product будет равен 15
Параметры и возвращаемые значения.
Методы могут принимать параметры (аргументы), которые передаются им при вызове. Они также могут возвращать значения определенных типов. В примере выше, int перед multiply означает, что метод вернет целочисленное значение.
Полезные советы.
1) Давайте методам понятные и описательные имена, чтобы их назначение было понятно даже без просмотра кода внутри;
2) Избегайте создания слишком больших методов. Лучше разбивайте задачи на более мелкие методы;
3) Подумайте о возможности переиспользования методов в разных частях программы.
Методы или функции - это один из ключевых инструментов программирования на Java. Они помогают делать код более структурированным, понятным и удобным для сопровождения. Практикуйтесь, создавая свои методы и экспериментируя с разными аргументами и возвращаемыми значениями.
✅ JavaStart. Подписаться
Это важные концепции, которые позволяют нам создавать более организованный и масштабируемый код.
Что такое методы/функции?
Методы (или функции) - это блоки кода, которые могут выполнять определенные действия и возвращать результаты. Они позволяют нам изолировать определенные задачи в отдельные блоки, делая код более читаемым и легко управляемым.
Создание методов.
Давайте посмотрим, как создать метод в Java:
public int multiply(int a, int b) {
int result = a * b;
return result;
}
В этом примере мы создали метод multiply, который принимает два аргумента a и b и возвращает их произведение.
У метода есть модификатор доступа, название, аргументы в скобках, тип возвращаемого значения, тело метода.
Использование методов.
Вызвать метод можно следующим образом:
int x = 5;
int y = 3;
int product = multiply(x, y);
// product будет равен 15
Параметры и возвращаемые значения.
Методы могут принимать параметры (аргументы), которые передаются им при вызове. Они также могут возвращать значения определенных типов. В примере выше, int перед multiply означает, что метод вернет целочисленное значение.
Полезные советы.
1) Давайте методам понятные и описательные имена, чтобы их назначение было понятно даже без просмотра кода внутри;
2) Избегайте создания слишком больших методов. Лучше разбивайте задачи на более мелкие методы;
3) Подумайте о возможности переиспользования методов в разных частях программы.
Методы или функции - это один из ключевых инструментов программирования на Java. Они помогают делать код более структурированным, понятным и удобным для сопровождения. Практикуйтесь, создавая свои методы и экспериментируя с разными аргументами и возвращаемыми значениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3👍3🔥2
Работа с пользовательским вводом в Java простыми словами.
Сегодня мы разберем самый простой пример, как работать с пользовательским вводом, чтобы наша программа могла взаимодействовать с пользователями.
Для чтения данных, введенных пользователем с клавиатуры, мы используем класс Scanner. На Картинке 1 показано как это работает.
После запуска программы в консоли появится строка "Введите ваше имя:"
Вводим Сергей
И после ввода имени будет вывод в консоли как на Картинке 2:
"Привет, Сергей!"
Анализ пользовательского ввода.
Scanner также позволяет нам анализировать ввод пользователя.
Например, давайте попросим пользователя ввести число и проверим, четное ли оно (Картинка 3).
Полезные советы.
1) Не забывайте импортировать java.util.Scanner в начале вашего кода, чтобы использовать класс Scanner;
2) При чтении строк с использованием nextLine(), помните, что метод оставляет в буфере символ новой строки. Возможно, вам придется добавить дополнительный scanner.nextLine() для очистки буфера перед следующим вводом.
✅ JavaStart. Подписаться
Сегодня мы разберем самый простой пример, как работать с пользовательским вводом, чтобы наша программа могла взаимодействовать с пользователями.
Для чтения данных, введенных пользователем с клавиатуры, мы используем класс Scanner. На Картинке 1 показано как это работает.
После запуска программы в консоли появится строка "Введите ваше имя:"
Вводим Сергей
И после ввода имени будет вывод в консоли как на Картинке 2:
"Привет, Сергей!"
Анализ пользовательского ввода.
Scanner также позволяет нам анализировать ввод пользователя.
Например, давайте попросим пользователя ввести число и проверим, четное ли оно (Картинка 3).
Полезные советы.
1) Не забывайте импортировать java.util.Scanner в начале вашего кода, чтобы использовать класс Scanner;
2) При чтении строк с использованием nextLine(), помните, что метод оставляет в буфере символ новой строки. Возможно, вам придется добавить дополнительный scanner.nextLine() для очистки буфера перед следующим вводом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3✍2👍2🔥1
Рассмотрим практические советы, которые помогут вам успешно начать свой путь в разработке на Java. Независимо от того, новичок вы или уже имеете опыт, эти советы будут полезны.
1. Обучение поэтапно
Не пытайтесь усвоить все сразу. Разбейте изучение на небольшие этапы. Начните с базовых концепций, затем перейдите к работе с массивами, методами и так далее.
2. Практика, практика, практика
Программирование - это практический навык. Пишите код как можно больше. Чем больше вы практикуетесь, тем увереннее будете чувствовать себя. Факт.
3. Чтение кода
Изучайте чужой код. Чтение чужого кода поможет вам увидеть разные подходы к решению задач. Это отличный способ улучшить свои навыки.
4. Ошибки - это нормально
Не бойтесь совершать ошибки. Они - часть обучения. Каждая ошибка - шанс извлечь урок и стать лучше. Развивайтесь через исправление ошибок.
5. Постоянное обучение
Технологии постоянно меняются, и разработчики всегда учатся чему-то новому. Следите за новостями в мире Java, изучайте новые библиотеки и инструменты.
6. Сотрудничество
Не бойтесь общаться с другими программистами. Форумы, сообщества, онлайн-курсы - все это места, где можно получить помощь, советы и поддержку, а также интересные и полезные знакомства.
7. Проекты для практики
Создавайте свои маленькие проекты. Это может быть простое приложение, игра или даже веб-сайт. Практика на реальных проектах поможет вам лучше понять, как применять свои знания.
8. Постоянный рост
Стремитесь к постоянному развитию. Улучшайте свой код, изучайте новые концепции, решайте сложные задачи. Никогда не останавливайтесь на достигнутом.
9. Вдохновение
Ищите вдохновение в успешных историях других программистов. Это поможет вам сохранить мотивацию и веру в себя.
Следуя этим советам, вы сможете сделать свой путь в разработке на Java более интересным и продуктивным. Не забывайте, что важно наслаждаться процессом обучения и не бояться искать новые вызовы. Успехов вам на вашем учебном пути! 👩💻👨💻
✅ JavaStart. Подписаться
1. Обучение поэтапно
Не пытайтесь усвоить все сразу. Разбейте изучение на небольшие этапы. Начните с базовых концепций, затем перейдите к работе с массивами, методами и так далее.
2. Практика, практика, практика
Программирование - это практический навык. Пишите код как можно больше. Чем больше вы практикуетесь, тем увереннее будете чувствовать себя. Факт.
3. Чтение кода
Изучайте чужой код. Чтение чужого кода поможет вам увидеть разные подходы к решению задач. Это отличный способ улучшить свои навыки.
4. Ошибки - это нормально
Не бойтесь совершать ошибки. Они - часть обучения. Каждая ошибка - шанс извлечь урок и стать лучше. Развивайтесь через исправление ошибок.
5. Постоянное обучение
Технологии постоянно меняются, и разработчики всегда учатся чему-то новому. Следите за новостями в мире Java, изучайте новые библиотеки и инструменты.
6. Сотрудничество
Не бойтесь общаться с другими программистами. Форумы, сообщества, онлайн-курсы - все это места, где можно получить помощь, советы и поддержку, а также интересные и полезные знакомства.
7. Проекты для практики
Создавайте свои маленькие проекты. Это может быть простое приложение, игра или даже веб-сайт. Практика на реальных проектах поможет вам лучше понять, как применять свои знания.
8. Постоянный рост
Стремитесь к постоянному развитию. Улучшайте свой код, изучайте новые концепции, решайте сложные задачи. Никогда не останавливайтесь на достигнутом.
9. Вдохновение
Ищите вдохновение в успешных историях других программистов. Это поможет вам сохранить мотивацию и веру в себя.
Следуя этим советам, вы сможете сделать свой путь в разработке на Java более интересным и продуктивным. Не забывайте, что важно наслаждаться процессом обучения и не бояться искать новые вызовы. Успехов вам на вашем учебном пути! 👩💻👨💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓4✍3👍2