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

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

17.07.2018, 09:54. Показов 4610. Ответов 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__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
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__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
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__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
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__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
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,980
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru