Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
6 / 10 / 0
Регистрация: 29.06.2018
Сообщений: 60

Слово this - для чего оно?

17.07.2018, 09:54. Показов 4307. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читал, что слово this используется в первую очередь для устранения конфликта локальных и глобальных переменных.
Пример кода:
Java
1
2
3
4
5
6
7
8
class ThisTest {
   int var1, var2;
   
   ThisTest(int var1, int var2) {
      this.var1 = var1;
      this.var2 = var2;
   }
}
То есть в конструктор прописываются 2 параметра.
1-й вопрос: переменная this.var1 - это глобальная переменная или локальная (параметр конструктора)? Иными словами, переменная с приставкой this - это переменная, объявленная выше (сначала), или же та переменная, что в скобках у конструктора?
2-й вопрос: разъясните, пожалуйста, применение this вот в таких конструкциях: this(b, c) - где такое используется и зачем?
3-й вопрос: какие есть ещё применения слова this в Java?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2018, 09:54
Ответы с готовыми решениями:

Что такое событие, для чего оно нужно
Помогите разобраться, что ли Вчера пытался понять что же такое событие, для чего оно нужно, зачем ему делегат Ну и собственно вот...

OpenVZ, VMware® ESXi 64-bit - для чего оно нужно?
Извиняюсь, может не там создал тему, но не нашел более подходящего раздела. Объясните зачем нужно виртуализировать систему? Для чего это...

Для чего предназначено бинарное дерево, что оно делает?
народ подскажите пожалуйста для чего предназначено бинарное дерево? что оно делает? (надо делать курсовую на паскале - ) если можно скиньте...

72
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
25.07.2018, 12:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alexjun Посмотреть сообщение
тот дурак

Не по теме:

очень уж категорично, батенька. скажем так, тот не молодец))

0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
25.07.2018, 12:26
Цитата Сообщение от alexjun Посмотреть сообщение
разница в коде.
что конкретно непонятно?
Я вижу что разница в коде, по разному пишут же не просто так.

Добавлено через 4 минуты
Цитата Сообщение от alexjun Посмотреть сообщение
Вы охереваете, естественно. И думаете, что в результате должно получится. Два синих? Два зеленых?
Я понимаю, что в конструкторе "this" нужен, что бы не было конфликта с полями. Вы сами выше написали конструктор без "this". Вопрос: в чем разница?
0
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
25.07.2018, 12:34
Цитата Сообщение от Vladimir1982 Посмотреть сообщение
Вопрос: в чем разница?

Не по теме:

похоже, нашествие "гениев"((

0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
25.07.2018, 12:38
в чем разница
В одном случае с this, в другом - без. Вот и вся разница
0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
25.07.2018, 12:42
Цитата Сообщение от iSmokeJC Посмотреть сообщение
В отдом случае с this, в другом - без. Вот и вся разница
А смысл писать без "this"?
0
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
25.07.2018, 12:49
Цитата Сообщение от Vladimir1982 Посмотреть сообщение
смысл писать без "this"
внутри класса и так понятно! некоторые люди всегда пишут с this.
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
25.07.2018, 12:50
Причем тут конструктор?
Конструктор, по факту, это тоже метод. Только несколько спецефический. Но в целом подчиняется тем же законам.
Если в методе есть переменная с таким же именем, что и поле класса. Неважно, обьявленная внутри метода или переданная извне. То при обращении по данному имени она перекрывает поле класса. И вы работаете с ней. Чтобы обратится именно к полю, вы обязаны дописать this. Что говорит компилятору, что идет обращение к полю, а не к переменной. Если же имя поля уникально, и пременной с таким именем нет, то хотите пишите, хотите нетпишите this - ваше дело.
0
25.07.2018, 12:50

Не по теме:

я думаю он вас тупо тролит

0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
25.07.2018, 13:04
Цитата Сообщение от alexjun Посмотреть сообщение
Причем тут конструктор?
Я выше написал что "this" я видел в основном в конструкторах и геттерах и сеттерах. Я знаю что и в других случаях употребятся "this", но я другие случаи не разбирал.

Добавлено через 1 минуту
Цитата Сообщение от Aviz__ Посмотреть сообщение
внутри класса и так понятно! некоторые люди всегда пишут с this.
Спасибо.

Цитата Сообщение от Pablito Посмотреть сообщение
я думаю он вас тупо тролит
Нет.
0
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
25.07.2018, 13:04
Цитата Сообщение от Vladimir1982 Посмотреть сообщение
другие случаи не разбирал
и что?! на данный момент вопрос в чем?
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
25.07.2018, 13:06
А я вам и ответил. Это не так.
This употребляется в любом методе внутри класса, если нужно обратится к полю, а внутри метода есть переменная с таким же именем.

Добавлено через 46 секунд
Конструкторы, сеттеры, геттеры тут не при чем!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.07.2018, 15:22
Vladimir1982, настоятельно рекомендую ещё раз внимательно перечитать всё, что Вам ответили, и действительно попробовать написать тренировочный класс с парой - тройкой конструкторов и методов. Если всё равно останутся вопросы, выкладывайте код своего учебного класса, указывайте непонятные моменты.
0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
25.07.2018, 16:01
Цитата Сообщение от easybudda Посмотреть сообщение
Vladimir1982, настоятельно рекомендую ещё раз внимательно перечитать всё, что Вам ответили, и действительно попробовать написать тренировочный класс с парой - тройкой конструкторов и методов. Если всё равно останутся вопросы, выкладывайте код своего учебного класса, указывайте непонятные моменты.
Вопрос мой был, чем отличается употребления конструктора с "this" и без него?

Добавлено через 3 минуты
выше приведенном примере


Цитата Сообщение от alexjun Посмотреть сообщение
Не совсем так.

class ThisTest {
* *int var1, var2;
ThisTest(int var1, int var2) {
* * * this.var1 = var1;
* * * this.var2 = var2;
* *}
}
Может легко существовать и без this

class ThisTest {
* *int var1, var2;
ThisTest(int var1_, int var2_) {
* * * var1 = var1_;
* * * var2 = var2_;
* *}
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.07.2018, 16:02
0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
25.07.2018, 17:21
Добавлено через 31 минуту
Alexjun, только сейчас заметил, переменные то разные

var1 = var1_;
var2 = var2_;
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
26.07.2018, 08:34
Цитата Сообщение от Vladimir1982 Посмотреть сообщение
Alexjun, только сейчас заметил, переменные то разные
Аллилуйа! Больше непоняток не осталось?
0
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
26.07.2018, 10:06
Цитата Сообщение от alexjun Посмотреть сообщение
В сеттерах тоже самое.
В геттерах вообще с трудом представляю использование this
JavaВыделить код

public int getVar(){
* *return this.var1; // так? масло масляное. и так понятно, и компилятору и человеку читающему код
}
можете пример без "this" привести?
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
26.07.2018, 10:32
Уберите this отсюда, и вот вам пример
1
68 / 18 / 0
Регистрация: 26.01.2018
Сообщений: 166
26.07.2018, 11:42
Цитата Сообщение от alexjun Посмотреть сообщение
Уберите this отсюда, и вот вам пример
Ясно. Спасибо!
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
26.07.2018, 11:57
Цитата Сообщение от Vladimir1982 Посмотреть сообщение
Ясно. Спасибо!
Да не за что.

Еще раз повторю для закрепления. )))
Когда речь идет о полях, а не о конструкторе this(), то:
1. В случае обращения к полю внутри класса, вы всегда можете использовать this - this.myName
Можете, но не всегда обязаны.
2. В случае, если в любом методе (включая любой конструктор) используется переменная совпадающая по имени с полем класса, для доступа к полю вы обязаны использовать слово this.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A{
  int a;
 
  void f1(int b){
    this.a=b; // допустимо, но не обязательно
    a=b; // запись эквивалентна предыдущей строке. согласно пункту 1) мы можем опустить this.  
  }
 
  void f2(int a){
     this.a=a;// this - обязательно, согласно пункту 2)
  }
  void f3(){
   int a=5;  
   this.a=a; // this - обязательно, согласно пункту 2)
  }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.07.2018, 11:57
Помогаю со студенческими работами здесь

Swapfile.sys Что это такое и для чего оно?
Я считаю что этот файл занимает много места. Реально ли удалить. Я знаю как уменьшить pagefile.sys(файл подкачки) но про swapfile ничего не...

Правильно ли составлено выражение, и для чего оно нужно в данном коде?
Всем доброго времени суток! Нужно составить код для решения уравнения методом итераций 0.25х^3+x-1.2502=0 х Вопрос,...

Для чего необходимо распределять память при помощи new и как оно работает
Сижу вот думаю над таким куском кода и не могу понять, как он работает. Допустим мы объявляем структуру: struct nameofctruct { ...

Подскажите что такое md5 шифрование пароля и для чего оно надо ?
Подскажите что такое md5 шифрование пароля и для чего оно надо ?

Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно палиндромом)
Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно палиндромом). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru