JavaStart
909 subscribers
906 photos
28 videos
617 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
Класс Object в Java.

Вопрос про класс Object и его методы очень часто встречается на собеседованиях. Это - база.

В Java есть специальный суперкласс Object, который является родителем для всех остальных классов, другими словами - все классы в Java наследуются от класса Object.

Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса. Поэтому объекты всех классов могут реализовать те методы, которые определены в классе Object.

А методы класса Object следующие:

– Class<?> getClass() – получает класс объекта во время выполнения;

– int hashCode() – возвращает хэш-код, связанный с вызывающим объектом;

– boolean equals(Object obj) – определяет, равен ли один объект другому;

– String toString() – возвращает строку, описывающую объект;

– Object clone() – создаёт новый объект, не отличающийся от клонируемого;

– void finalize() – вызывается перед удалением неиспользуемого объекта;

– void notify() – возобновляет выполнение потока, который ожидает вызывающего объекта;

– void notifyAll() – возобновляет выполнение всех потоков, которые ожидают вызывающего объекта;

– void wait() – ожидает другого потока выполнения.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42👨‍💻2🔥1
Сегодня давайте поговорим о методе getClass() в Java.

getClass() - это метод, предоставляемый всеми объектами в Java, который возвращает объект типа Class. Но что это такое?

📘 Class - это специальный объект, который представляет собой метаинформацию о типе класса. С помощью getClass() мы можем получить доступ к этой метаинформации и узнать различные вещи о классе.

Например, мы можем узнать имя класса:

public class MyClass {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        Class<?> clazz = obj.getClass();
       
        System.out.println("Имя класса: " + clazz.getName());
    }
}

Этот код выведет: Имя класса: com.example.MyClass.

💡 Почему это важно?
Метод getClass() может быть полезен, например, при рефлексии, когда нужно работать с классами во время выполнения программы. Метод очень полезен при отладке программы, чтобы найти возможную причину того или иного бага, особенно при разработке с использованием фреймворка Spring Boot.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2👨‍💻21🔥1
Метод hashCode() в Java.

Сегодня мы поговорим о методе hashCode() в Java. Это как ключик, который открывает нам доступ к таинственному миру хранения объектов в коллекциях.

🔑 Что такое hashCode()?

hashCode() - это метод, который возвращает целочисленное значение (хэш-код) объекта. Этот код используется, например, при работе с коллекциями, чтобы быстро находить объекты.

🤔 Зачем он нужен?

Повышение производительности: Когда вы хотите найти объект в коллекции, быстрый доступ по хэш-коду ускоряет процесс.
Работа с коллекциями: HashSet, HashMap и другие коллекции используют hashCode() для эффективного хранения объектов.

Выведем представление ниже определенного объекта:

Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // 2036368507

Метод .hashCode(), определенный классом Object, возвращает разные целые числа для разных объектов.

💡 Совет:

Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст hashCode().

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43👨‍💻2
Когда всей тимой ищите баг

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🔥2💯2
Метод .equals() в Java.

Сегодня мы поговорим о методе equals() в Java, как о ключевой команде для сравнения объектов.

💡 Зачем нужен equals()?
equals() - метод, который используется для сравнения содержимого объектов. Он позволяет ответить на вопрос: "Эти два объекта равны?"

🤔 Как его использовать:

1) Переопределение метода:

public class MyClass {
    private String name;
    private int age;

    // ... конструктор, геттеры, сеттеры и другие методы

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;  // сравнение ссылок
        if (obj == null || getClass() != obj.getClass()) return false;  // проверка классов

        MyClass myObject = (MyClass) obj;

        return age == myObject.age && Objects.equals(name, myObject.name);
    }
}

2) Сравнение с null:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;  // ссылки идентичны
    if (obj == null || getClass() != obj.getClass()) return false;  // проверка классов

    // ... остальной код
}

3) Использование Objects.equals():

return Objects.equals(name, myObject.name);

💡 Важное замечание:

- Переопределите hashCode(), если переопределяете equals(). Это очень важное правило, о котором спрашивают на каждом собеседовании на Java разработчика.

Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст equals().

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3👨‍💻31
Сегодня наш путь ведет нас к методу toString() в Java, своего рода магическому зеркалу для объектов.

🌐 Что такое toString()?
Это метод, который возвращает строковое представление объекта. Когда мы вызываем его для объекта, он возвращает строку, представляющую его состояние.

💡 Зачем это нужно:

1) Отладка.
Удобно использовать toString() для вывода содержимого объекта в целях отладки.

2) Читаемость кода.
Полезно переопределять toString(), чтобы объекты были легко читаемы в логах или консоли.

🚀 Как использовать:

1) Простой вариант на Картинке 1:

public class MyClass {
    private String name;
    private int age;

    // ... конструктор, геттеры, сеттеры и другие методы

    @Override
    public String toString() {
        return "MyClass{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2) Использование Objects.toString() на Картинке 2:

@Override
public String toString() {
    return Objects.toString(name) + ", " + age;
}

3) Использование String.format() также на Картинке 2:

Override
public String toString() {
    return String.format("Name: %s, Age: %d", name, age);
}

💡 Советы:

Библиотека Lombok в деле: если используете Lombok, аннотация @ToString автоматически создаст toString().

Переопределение toString() делает ваш код более читаемым и облегчает отладку.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👨‍💻2🔥1
Поговорим о методе clone() в Java, который открывает перед нами врата клонирования объектов.

🔍 Что такое clone()?
clone() - это метод, который используется для создания копии объекта. Он находится в интерфейсе Cloneable и создает поверхностную копию объекта.

🚀 Как использовать:

1) Имплементация интерфейса Cloneable (см. Картинку 1).

Объект, который мы хотим клонировать, должен реализовывать интерфейс Cloneable и переопределять метод clone().

2) Глубокое клонирование (см. Картинку 2).

В стандартной реализации clone() создается поверхностная копия объекта. Если вам нужно глубокое клонирование (с копированием вложенных объектов), вы должны переопределить clone() вручную.

3) Использование в коде (см. Картинку 2).

🛑 Осторожно:

Клонирование объектов может вызвать проблемы с производительностью и безопасностью. Иногда лучше использовать другие методы, такие как конструктор копирования или методы фабрики.

На практике в коммерческой разработке обычно используется клонирование с помощью метода конструктора, который создает новый объект.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👨‍💻2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁6💯3👨‍💻2
Методы wait(), notify() и notifyAll() в Java.

🚦 Многопоточность в Java

Многопоточность - это способность программы обрабатывать несколько потоков выполнения параллельно. В Java у нас есть инструменты для управления потоками, и одними из них являются методы wait(), notify() и notifyAll().

На собеседовании желательно упомянуть эти, рассказывая о методах класса Object. Даже если вы не сильно разбираетесь в многопоточности, но знаете о таких методах, методах контроля потоков, - уже будет хорошо.

Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.

Иногда при взаимодействии потоков встает вопрос о извещении одних потоков о действиях других. Например, действия одного потока зависят от результата действий другого потока, и надо как-то известить один поток, что второй поток произвел некую работу.

wait() освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify();

notify() продолжает работу потока, у которого ранее был вызван метод wait();

notifyAll() возобновляет работу всех потоков, у которых ранее был вызван метод wait().

Эти методы - мощный инструмент в арсенале Java-разработчика, и их правильное использование делает наши многопоточные приложения более надежными и эффективными.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓43👍2👨‍💻1
Разбираем модификаторы доступа в Java. Часть 1.

🛡️ Модификаторы доступа: защитники кода

В Java есть четыре основных модификатора доступа:

1) public
Класс, метод или поле с модификатором public доступны из любого другого класса.

2) private
Элемент с модификатором private виден только в пределах своего собственного класса. Другие классы не имеют к нему доступа.

3) protected
Элемент с модификатором protected виден внутри своего пакета и в подклассах, даже если они находятся в других пакетах.

4) default (package visible)
Если элемент класса не имеет явного модификатора (не public, не private, не protected), то он виден только внутри своего собственного пакета.

🌐 Пример использования:

// Класс с модификатором public
public class PublicClass {
    // Поле с модификатором private
    private int privateField;

    // Метод с модификатором protected
    protected void protectedMethod() {
        // ...
    }

    // Метод без явного модификатора (default)
    void defaultMethod() {
        // ...
    }
}

🤔 Как выбрать правильный модификатор?

1) Используйте private, чтобы скрыть реализацию внутри класса.

2) Используйте protected, когда вам нужен доступ в подклассах.

3) Используйте public для элементов, к которым нужен общедоступный доступ.

📘 Помните:

Модификаторы доступа - это инструмент безопасности и контроля доступа.
Правильное использование модификаторов улучшает читаемость и поддерживаемость кода.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥2💯1
Разбираем модификаторы доступа в Java. Часть 2.

Представьте, что у вас есть библиотека, где каждая книга - это класс в Java, и вы хотите управлять доступом к различным частям этой библиотеки.

📚 Главная Книга:

public class Library {
    public void openBook() {
        System.out.println("Открываю главную книгу.");
    }
}

В этой библиотеке у нас есть класс Library, и метод openBook() обозначен как public. Это как главная книга, которую можно прочитать любому посетителю библиотеки.

🔒 Секретная Комната:

class RestrictedSection {
    private String secretCode = "Lib123";

    void enterSection(String code) {
        if (code.equals(secretCode)) {
            System.out.println("Вход в секретную комнату разрешен.");
        } else {
            System.out.println("Неверный код доступа.");
        }
    }
}

В этой части библиотеки у нас есть класс RestrictedSection, и свойство secretCode объявлено как private. Метод enterSection() имеет доступ к этому коду и может быть вызван только внутри этого класса. Это как секретная комната с кодовым замком.

🔑 Ключевой Куратор:

public class Librarian {
    void manageBooks() {
        System.out.println("Управляю каталогом книг в библиотеке.");
    }
}

В классе Librarian метод manageBooks() объявлен с модификатором default (package-private). Это означает, что только другие классы в том же пакете могут вызывать этот метод. Это как библиотекарь, управляющий книгами в пределах библиотеки.

Таким образом, модификаторы доступа в Java - это как ключи к различным секциям нашей библиотеки. Они обеспечивают уровни безопасности и управления доступом, делая наш код более устойчивым и гибким.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥321