Как использовать this как параметр java

Аватар пользователя Игорь Черкасов
Игорь Черкасов
02 декабря 2022

Ключевое слово this - это ссылка на текущий объект: объект, метод или конструктор которого вызывается (спецификация Oracle).

Поэтому, передавая this как параметр, мы фактически передаем ссылку на текущий объект. Рассмотрим на примере:


//Создадим простой класс ThisExample
public class ThisExample {

    private String message = "null";

//добавим конструктор с аргументом
    public ThisExample(String message) {
        this.message = message;
    }

}

Ключевое слово this в данном случае использовали, чтобы присвоить переменной класса переданный аргумент в конструктор, т.к. их названия одинаковые.

Также можно использовать ссылки на конструкторы одного и того же класса.


public class ThisExample {

    public ThisExample() {
        System.out.println("Конструктор без аргументов");

    }

    public ThisExample(String message) {
        this();
        System.out.println("Конструктор с сообщением: " + message);

    }

}

Если мы создадим конструктор класса с аргументом, то сначала будет вызван конструктор без аргумента:


    public static void main(String[] args) {
        new ThisExample("this");

    }

Вывод будет следующим:

> Конструктор без аргументов
> Конструктор с сообщением: test

Или наоборот, можем вызвать конструктор с аргуметом из конструктора без аргумента и передать в него параметры:


    private String message = "null";

    public ThisExample() {
        this("Test message");

    }

    public ThisExample(String message) {
        this.message = message;
    }

Можно передать this в качестве аргумента в метод:


   static class ThisExample {
        private String message = "null";

        public ThisExample() {
            printMessage(this);
        }

        public ThisExample(String message) {
            this.message = message;
            printMessage(this);
        }

        //метод, в который передаем this в качестве аргумента        
        public void printMessage(ThisExample msg) {
            System.out.println(msg);
        }

        //переопределим метод toString, для наглядности
        @Override
        public String toString() {
        return "message='" + message + '\'';
        }
    }

Запустим наш код:


    public static void main(String[] args) {
        new ThisExample();
        new ThisExample("this");

    }

Вывод будет следующим:

> message='null'
> message='this'
0 0

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки