Вы придете на встречу?
Anonymous Poll
56%
Да, конечно, я хочу пообщаться
44%
Да, я хотел бы, но не могу
0%
Нет, я не приду, мне не инетересно!
Java for Beginner
Вы придете на встречу?
Сегодня в 16:00 по МСК, будем общаться, писать простого бота)))
Залетайте, ссылку опубликуем в нашем чате - https://t.me/Java_Beginner_chat
Залетайте, ссылку опубликуем в нашем чате - https://t.me/Java_Beginner_chat
Java for Beginner
Урок по созданию простейшего бота окончен. Жаль что присутствовал всего 1 человек( Чуть позже видео будет на ютуб канале, обязательно выложу сюда. Надеюсь, что оно окажется Вам полезным и на следующих выходных мы соберемся более плотной компанией)))))
https://youtu.be/1OQe8t3O3Ic - смотрим, задаем вопросы, критикуем!)))))
YouTube
Гайд по созданию простейшего телеграмм бота на JAVA. Запись встречи от 30.06.2024
В рамках встречи канала, рассказал как создать простейшего телеграмм бота, приписал простейшую логику.
ссылка на наш канал будет в комментариях!
#java #bot #telegram #intellij #guide #ultimate #гайд #телеграммканал #телеграммбот #телеграм #бот #создать
ссылка на наш канал будет в комментариях!
#java #bot #telegram #intellij #guide #ultimate #гайд #телеграммканал #телеграммбот #телеграм #бот #создать
Объектные потоки: ObjectInputStream, ObjectOutputStream
Объектные потоки в Java используются для чтения и записи объектов. Они позволяют сохранить состояние объекта и затем восстановить его, что полезно для хранения данных между запусками программы или передачи объектов между различными компонентами системы.
ObjectOutputStream
ObjectOutputStream — это класс, который используется для записи объектов в поток. Он записывает объекты в виде последовательности байтов, что позволяет сохранять и передавать объекты.
Основные методы ObjectOutputStream:
Конструкторы:
ObjectOutputStream(OutputStream out): Создает объект ObjectOutputStream, связанный с указанным выходным потоком.
Запись объектов:
void writeObject(Object obj): Записывает объект obj в выходной поток. Объект должен реализовывать интерфейс Serializable.
Другие методы
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
void flush(): Очищает буфер, записывая все данные в выходной поток.
Пример использования ObjectOutputStream для записи объекта в файл:
В этом примере создается объект Person и записывается в файл person.ser с помощью ObjectOutputStream.
ObjectInputStream
ObjectInputStream — это класс, который используется для чтения объектов из потока. Он восстанавливает объекты из последовательности байтов, записанных с помощью ObjectOutputStream.
Основные методы ObjectInputStream:
Конструкторы:
ObjectInputStream(InputStream in): Создает объект ObjectInputStream, связанный с указанным входным потоком.
Чтение объектов:
Object readObject(): Читает объект из входного потока. Требуется приведение типа (casting) к нужному классу.
Другие методы:
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
Пример использования ObjectInputStream для чтения объекта из файла:
В этом примере объект Person читается из файла person.ser с помощью ObjectInputStream и выводится на консоль.
#Java #Training #IO
Объектные потоки в Java используются для чтения и записи объектов. Они позволяют сохранить состояние объекта и затем восстановить его, что полезно для хранения данных между запусками программы или передачи объектов между различными компонентами системы.
ObjectOutputStream
ObjectOutputStream — это класс, который используется для записи объектов в поток. Он записывает объекты в виде последовательности байтов, что позволяет сохранять и передавать объекты.
Основные методы ObjectOutputStream:
Конструкторы:
ObjectOutputStream(OutputStream out): Создает объект ObjectOutputStream, связанный с указанным выходным потоком.
Запись объектов:
void writeObject(Object obj): Записывает объект obj в выходной поток. Объект должен реализовывать интерфейс Serializable.
Другие методы
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
void flush(): Очищает буфер, записывая все данные в выходной поток.
Пример использования ObjectOutputStream для записи объекта в файл:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}
public class ObjectOutputStreamExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
В этом примере создается объект Person и записывается в файл person.ser с помощью ObjectOutputStream.
ObjectInputStream
ObjectInputStream — это класс, который используется для чтения объектов из потока. Он восстанавливает объекты из последовательности байтов, записанных с помощью ObjectOutputStream.
Основные методы ObjectInputStream:
Конструкторы:
ObjectInputStream(InputStream in): Создает объект ObjectInputStream, связанный с указанным входным потоком.
Чтение объектов:
Object readObject(): Читает объект из входного потока. Требуется приведение типа (casting) к нужному классу.
Другие методы:
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
Пример использования ObjectInputStream для чтения объекта из файла:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
В этом примере объект Person читается из файла person.ser с помощью ObjectInputStream и выводится на консоль.
#Java #Training #IO
Что выведет код?
#Tasks
public class VariableTypesExample {
static int classVariable = 10; // Class variable
public static void main(String[] args) {
int localVariable = 5; // Local variable
VariableTypesExample example = new VariableTypesExample();
example.instanceMethod();
staticMethod();
System.out.println("Class Variable: " + classVariable);
System.out.println("Local Variable: " + localVariable);
System.out.println("Instance Variable: " + example.instanceVariable);
}
int instanceVariable = 20; // Instance variable
void instanceMethod() {
classVariable = 15;
instanceVariable = 25;
}
static void staticMethod() {
classVariable = 30;
}
}
#Tasks
Сериализация и десериализация объектов
Сериализация — это процесс преобразования объекта в последовательность байтов, которая может быть сохранена в файл или передана по сети.
Десериализация — это обратный процесс, при котором байты преобразуются обратно в объект. Эти процессы позволяют сохранять состояние объекта и восстанавливать его в любой момент.
Сериализация
Для того чтобы объект можно было сериализовать, его класс должен реализовывать интерфейс Serializable. Этот интерфейс является маркерным, то есть не содержит методов и служит лишь для указания JVM, что объекты этого класса могут быть сериализованы.
Пример класса, реализующего Serializable:
В этом примере класс Person реализует Serializable, что позволяет его объекты сериализовать.
Процесс сериализации:
Создаем объект ObjectOutputStream, связанный с выходным потоком (например, FileOutputStream).
Вызываем метод writeObject(Object obj) для записи объекта в поток.
Пример сериализации:
Десериализация
Процесс десериализации включает чтение последовательности байтов и создание из них объекта. Для этого используется класс ObjectInputStream.
Процесс десериализации:
Создаем объект ObjectInputStream, связанный с входным потоком (например, FileInputStream).
Вызываем метод readObject() для чтения объекта из потока. Обязательно выполняем приведение типа (casting) к нужному классу.
Пример десериализации:
serialVersionUID
Каждый сериализуемый класс должен иметь статическое поле serialVersionUID, которое используется для обеспечения совместимости версий класса. Если serialVersionUID у класса изменится, десериализация объектов, сериализованных с предыдущей версией класса, вызовет ошибку.
Пример объявления serialVersionUID:
Транзиентные поля
Поля, помеченные ключевым словом transient, не будут сериализованы. Это полезно для полей, которые не нужно сохранять, например, паролей или других конфиденциальных данных.
Пример использования transient:
В этом примере поле password не будет сериализовано.
#Java #Training #IO #Serializable
Сериализация — это процесс преобразования объекта в последовательность байтов, которая может быть сохранена в файл или передана по сети.
Десериализация — это обратный процесс, при котором байты преобразуются обратно в объект. Эти процессы позволяют сохранять состояние объекта и восстанавливать его в любой момент.
Сериализация
Для того чтобы объект можно было сериализовать, его класс должен реализовывать интерфейс Serializable. Этот интерфейс является маркерным, то есть не содержит методов и служит лишь для указания JVM, что объекты этого класса могут быть сериализованы.
Пример класса, реализующего Serializable:
import java.io.Serializable;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}
В этом примере класс Person реализует Serializable, что позволяет его объекты сериализовать.
Процесс сериализации:
Создаем объект ObjectOutputStream, связанный с выходным потоком (например, FileOutputStream).
Вызываем метод writeObject(Object obj) для записи объекта в поток.
Пример сериализации:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Десериализация
Процесс десериализации включает чтение последовательности байтов и создание из них объекта. Для этого используется класс ObjectInputStream.
Процесс десериализации:
Создаем объект ObjectInputStream, связанный с входным потоком (например, FileInputStream).
Вызываем метод readObject() для чтения объекта из потока. Обязательно выполняем приведение типа (casting) к нужному классу.
Пример десериализации:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
serialVersionUID
Каждый сериализуемый класс должен иметь статическое поле serialVersionUID, которое используется для обеспечения совместимости версий класса. Если serialVersionUID у класса изменится, десериализация объектов, сериализованных с предыдущей версией класса, вызовет ошибку.
Пример объявления serialVersionUID:
class Person implements Serializable {
private static final long serialVersionUID = 1L;
// остальные поля и методы
}
Транзиентные поля
Поля, помеченные ключевым словом transient, не будут сериализованы. Это полезно для полей, которые не нужно сохранять, например, паролей или других конфиденциальных данных.
Пример использования transient:
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private transient String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{username='" + username + "', password='" + password + "'}";
}
}
В этом примере поле password не будет сериализовано.
#Java #Training #IO #Serializable
Forwarded from English Beginners
Классы-обёртки (Wrapper classes): Integer, Double
В Java классы-обёртки (Wrapper classes) предоставляют способ использования примитивных типов данных (таких как int, char, boolean и т.д.) в качестве объектов. Это необходимо, потому что многие методы и структуры данных в Java работают только с объектами, а не с примитивами.
Каждый примитивный тип данных имеет соответствующий класс-обёртку в пакете java.lang:
boolean -> Boolean
byte -> Byte
char -> Character
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
Зачем нужны классы-обёртки?
Коллекции: Коллекции в Java, такие как ArrayList, могут хранить только объекты, поэтому классы-обёртки необходимы для работы с примитивными типами в коллекциях.
Методы: Некоторые методы, особенно в сторонних библиотеках, работают только с объектами.
Методы утилиты: Классы-обёртки предоставляют много полезных методов для преобразования, сравнения и манипулирования значениями.
Примеры использования классов-обёрток
Integer - класс-обёртка для примитивного типа int.
Основные методы:
static Integer valueOf(int i): Возвращает экземпляр Integer, представляющий заданное значение int.
int intValue(): Возвращает значение int, хранимое в объекте Integer.
static int parseInt(String s): Преобразует строку в int.
static String toString(int i): Преобразует int в строку.
int compareTo(Integer anotherInteger): Сравнивает два объекта Integer.
Пример использования Integer:
Double - класс-обёртка для примитивного типа double.
Основные методы:
static Double valueOf(double d): Возвращает экземпляр Double, представляющий заданное значение double.
double doubleValue(): Возвращает значение double, хранимое в объекте Double.
static double parseDouble(String s): Преобразует строку в double.
static String toString(double d): Преобразует double в строку.
int compareTo(Double anotherDouble): Сравнивает два объекта Double.
Пример использования Double:
Character - класс-обёртка для примитивного типа char.
Основные методы:
static Character valueOf(char c): Возвращает экземпляр Character, представляющий заданное значение char.
char charValue(): Возвращает значение char, хранимое в объекте Character.
static boolean isDigit(char ch): Проверяет, является ли символ цифрой.
static boolean isLetter(char ch): Проверяет, является ли символ буквой.
static char toUpperCase(char ch): Преобразует символ в верхний регистр.
static char toLowerCase(char ch): Преобразует символ в нижний регистр.
Пример использования Character:
#Java #Training
В Java классы-обёртки (Wrapper classes) предоставляют способ использования примитивных типов данных (таких как int, char, boolean и т.д.) в качестве объектов. Это необходимо, потому что многие методы и структуры данных в Java работают только с объектами, а не с примитивами.
Каждый примитивный тип данных имеет соответствующий класс-обёртку в пакете java.lang:
boolean -> Boolean
byte -> Byte
char -> Character
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
Зачем нужны классы-обёртки?
Коллекции: Коллекции в Java, такие как ArrayList, могут хранить только объекты, поэтому классы-обёртки необходимы для работы с примитивными типами в коллекциях.
Методы: Некоторые методы, особенно в сторонних библиотеках, работают только с объектами.
Методы утилиты: Классы-обёртки предоставляют много полезных методов для преобразования, сравнения и манипулирования значениями.
Примеры использования классов-обёрток
Integer - класс-обёртка для примитивного типа int.
Основные методы:
static Integer valueOf(int i): Возвращает экземпляр Integer, представляющий заданное значение int.
int intValue(): Возвращает значение int, хранимое в объекте Integer.
static int parseInt(String s): Преобразует строку в int.
static String toString(int i): Преобразует int в строку.
int compareTo(Integer anotherInteger): Сравнивает два объекта Integer.
Пример использования Integer:
public class WrapperExample {
public static void main(String[] args) {
Integer integerObject = Integer.valueOf(10);
int intValue = integerObject.intValue();
System.out.println("Integer value: " + intValue);
String str = "20";
int parsedInt = Integer.parseInt(str);
System.out.println("Parsed integer: " + parsedInt);
}
}
Double - класс-обёртка для примитивного типа double.
Основные методы:
static Double valueOf(double d): Возвращает экземпляр Double, представляющий заданное значение double.
double doubleValue(): Возвращает значение double, хранимое в объекте Double.
static double parseDouble(String s): Преобразует строку в double.
static String toString(double d): Преобразует double в строку.
int compareTo(Double anotherDouble): Сравнивает два объекта Double.
Пример использования Double:
public class WrapperExample {
public static void main(String[] args) {
Double doubleObject = Double.valueOf(10.5);
double doubleValue = doubleObject.doubleValue();
System.out.println("Double value: " + doubleValue);
String str = "20.5";
double parsedDouble = Double.parseDouble(str);
System.out.println("Parsed double: " + parsedDouble);
}
}
Character - класс-обёртка для примитивного типа char.
Основные методы:
static Character valueOf(char c): Возвращает экземпляр Character, представляющий заданное значение char.
char charValue(): Возвращает значение char, хранимое в объекте Character.
static boolean isDigit(char ch): Проверяет, является ли символ цифрой.
static boolean isLetter(char ch): Проверяет, является ли символ буквой.
static char toUpperCase(char ch): Преобразует символ в верхний регистр.
static char toLowerCase(char ch): Преобразует символ в нижний регистр.
Пример использования Character:
public class WrapperExample {
public static void main(String[] args) {
Character charObject = Character.valueOf('a');
char charValue = charObject.charValue();
System.out.println("Character value: " + charValue);
char upperChar = Character.toUpperCase(charValue);
System.out.println("Upper case: " + upperChar);
boolean isLetter = Character.isLetter(charValue);
System.out.println("Is letter: " + isLetter);
}
}
#Java #Training
Что выведет код?
#Tasks
public class BoxingExample {
public static void main(String[] args) {
Integer a = 1000;
Integer b = 1000;
Integer c = 10;
Integer d = 10;
System.out.println(a == b);
System.out.println(c == d);
}
}
#Tasks
Подписывайтесь на канал, мы поможем построить правильные планы 😏
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems
Forwarded from English Beginners
Автоупаковка (Autoboxing) и распаковка (Unboxing)
Автоупаковка (Autoboxing) и распаковка (Unboxing) — это процесс автоматического преобразования между примитивными типами данных и их соответствующими классами-обёртками в Java. Эти функции были введены в J2SE 5.0 и значительно упрощают код, устраняя необходимость явного преобразования.
Автоупаковка (Autoboxing)
Автоупаковка — это автоматическое преобразование примитивного типа в соответствующий ему объект класса-обёртки.
Примеры автоупаковки:
В этом примере примитивный int автоматически преобразуется в объект Integer, а примитивный char — в объект Character.
Распаковка (Unboxing)
Распаковка — это автоматическое преобразование объекта класса-обёртки обратно в соответствующий примитивный тип.
Примеры распаковки:
В этом примере объект Integer автоматически преобразуется в примитивный int, а объект Character — в примитивный char.
Преимущества автопреобразования
Упрощение кода: Снижение количества явных преобразований, улучшение читаемости и поддерживаемости кода.
Совместимость с коллекциями: Возможность использования примитивных типов данных в коллекциях, таких как ArrayList, без необходимости явного преобразования.
Особенности и подводные камни
Производительность: Автоупаковка и распаковка могут привести к снижению производительности из-за дополнительных операций создания объектов.
NullPointerException: При распаковке, если объект класса-обёртки равен null, возникает NullPointerException.
Пример потенциальной ошибки с распаковкой:
В этом примере попытка распаковки null объекта Integer приводит к NullPointerException.
#Java #Training
Автоупаковка (Autoboxing) и распаковка (Unboxing) — это процесс автоматического преобразования между примитивными типами данных и их соответствующими классами-обёртками в Java. Эти функции были введены в J2SE 5.0 и значительно упрощают код, устраняя необходимость явного преобразования.
Автоупаковка (Autoboxing)
Автоупаковка — это автоматическое преобразование примитивного типа в соответствующий ему объект класса-обёртки.
Примеры автоупаковки:
public class AutoboxingExample {
public static void main(String[] args) {
int intValue = 5;
Integer integerObject = intValue; // Автоупаковка
System.out.println("Integer object: " + integerObject);
char charValue = 'a';
Character characterObject = charValue; // Автоупаковка
System.out.println("Character object: " + characterObject);
}
}
В этом примере примитивный int автоматически преобразуется в объект Integer, а примитивный char — в объект Character.
Распаковка (Unboxing)
Распаковка — это автоматическое преобразование объекта класса-обёртки обратно в соответствующий примитивный тип.
Примеры распаковки:
public class UnboxingExample {
public static void main(String[] args) {
Integer integerObject = Integer.valueOf(10);
int intValue = integerObject; // Распаковка
System.out.println("Primitive int: " + intValue);
Character characterObject = Character.valueOf('a');
char charValue = characterObject; // Распаковка
System.out.println("Primitive char: " + charValue);
}
}
В этом примере объект Integer автоматически преобразуется в примитивный int, а объект Character — в примитивный char.
Преимущества автопреобразования
Упрощение кода: Снижение количества явных преобразований, улучшение читаемости и поддерживаемости кода.
Совместимость с коллекциями: Возможность использования примитивных типов данных в коллекциях, таких как ArrayList, без необходимости явного преобразования.
Особенности и подводные камни
Производительность: Автоупаковка и распаковка могут привести к снижению производительности из-за дополнительных операций создания объектов.
NullPointerException: При распаковке, если объект класса-обёртки равен null, возникает NullPointerException.
Пример потенциальной ошибки с распаковкой:
public class UnboxingPitfall {
public static void main(String[] args) {
Integer integerObject = null;
try {
int intValue = integerObject; // Может вызвать NullPointerException
} catch (NullPointerException e) {
System.out.println("Caught NullPointerException!");
}
}
}
В этом примере попытка распаковки null объекта Integer приводит к NullPointerException.
#Java #Training
Класс Object и его значение в Java
В Java класс Object является родительским классом для всех других классов. Это означает, что любой класс в Java неявно наследуется от класса Object, если явно не указано иное. Это делает Object основным строительным блоком для всех классов в Java и предоставляет несколько методов, которые могут быть переопределены для конкретного поведения.
Основные методы класса Object
Класс Object содержит несколько методов, которые могут быть использованы и переопределены в ваших классах:
public boolean equals(Object obj)
public int hashCode()
public String toString()
protected Object clone() throws CloneNotSupportedException
public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException
public final void notify()
public final void notifyAll()
protected void finalize() throws Throwable
equals()
Метод equals() используется для сравнения двух объектов на равенство. По умолчанию метод equals() в классе Object сравнивает ссылки на объекты, т.е. проверяет, указывают ли обе ссылки на один и тот же объект в памяти. Обычно этот метод переопределяется, чтобы определить равенство объектов по их содержимому.
Пример переопределения equals()
hashCode()
Метод hashCode() возвращает целочисленное значение, представляющее внутренний адрес объекта. В Java рекомендуется переопределять hashCode() всякий раз, когда переопределяется equals(), чтобы поддерживать согласованность между этими двумя методами. Объекты, которые равны по методу equals(), должны иметь одинаковый хеш-код.
Пример переопределения hashCode()
toString()
Метод toString() возвращает строковое представление объекта. Этот метод часто переопределяется, чтобы предоставить более информативное строковое представление объектов.
Пример переопределения toString()
#Java #Training #Object
В Java класс Object является родительским классом для всех других классов. Это означает, что любой класс в Java неявно наследуется от класса Object, если явно не указано иное. Это делает Object основным строительным блоком для всех классов в Java и предоставляет несколько методов, которые могут быть переопределены для конкретного поведения.
Основные методы класса Object
Класс Object содержит несколько методов, которые могут быть использованы и переопределены в ваших классах:
public boolean equals(Object obj)
public int hashCode()
public String toString()
protected Object clone() throws CloneNotSupportedException
public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException
public final void notify()
public final void notifyAll()
protected void finalize() throws Throwable
equals()
Метод equals() используется для сравнения двух объектов на равенство. По умолчанию метод equals() в классе Object сравнивает ссылки на объекты, т.е. проверяет, указывают ли обе ссылки на один и тот же объект в памяти. Обычно этот метод переопределяется, чтобы определить равенство объектов по их содержимому.
Пример переопределения equals()
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
hashCode()
Метод hashCode() возвращает целочисленное значение, представляющее внутренний адрес объекта. В Java рекомендуется переопределять hashCode() всякий раз, когда переопределяется equals(), чтобы поддерживать согласованность между этими двумя методами. Объекты, которые равны по методу equals(), должны иметь одинаковый хеш-код.
Пример переопределения hashCode()
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
toString()
Метод toString() возвращает строковое представление объекта. Этот метод часто переопределяется, чтобы предоставить более информативное строковое представление объектов.
Пример переопределения toString()
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
#Java #Training #Object
Что выведет код?
#Tasks
public class ObjectMethodsExample {
public static void main(String[] args) {
MyClass obj1 = new MyClass(1);
MyClass obj2 = new MyClass(1);
MyClass obj3 = obj1;
System.out.println(obj1.equals(obj2));
System.out.println(obj1 == obj2);
System.out.println(obj1.hashCode() == obj2.hashCode());
System.out.println(obj1 == obj3);
}
}
class MyClass {
int value;
MyClass(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass myClass = (MyClass) obj;
return value == myClass.value;
}
@Override
public int hashCode() {
return value;
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
86%
true false true true
14%
false false true true
0%
true false false true
0%
false true false true