Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
XOlegX
#1

this в Java - Программирование Android

31.10.2013, 03:41. Просмотров 1008. Ответов 15
Метки нет (Все метки)

Доброго времени суток,
Недавно начал изучение программирование на андроид, знаком с основами java. При чтении различных курсов, часто встречаю this, при этом не понимая о чем на самом деле идет речь в контексте. Находил в буржнете об этом информацию, но всё равно не понятно. Объясните тупому. Вот пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class MainActivity extends Activity implements OnClickListener {
 
   TextView tvOut;
   Button btnOk;
   Button btnCancel;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
 
     // найдем View-элементы
     tvOut = (TextView) findViewById(R.id.tvOut);
     btnOk = (Button) findViewById(R.id.btnOk);
     btnCancel = (Button) findViewById(R.id.btnCancel);
 
     // присваиваем обработчик кнопкам
     btnOk.setOnClickListener(this);
     btnCancel.setOnClickListener(this);
   }
 
   @Override
   public void onClick(View v) {
     // по id определеяем кнопку, вызвавшую этот обработчик
     switch (v.getId()) {
     case R.id.btnOk:
       // кнопка ОК
       tvOut.setText("Нажата кнопка ОК");
       break;
     case R.id.btnCancel:
       // кнопка Cancel
       tvOut.setText("Нажата кнопка Cancel");
       break;
     }
   }
 
 }
.

Заранее спасибо
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 03:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос this в Java (Программирование Android):

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map - Программирование Android
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой: FATAL EXCEPTION: main Process:...

Не создаются BuildConfig.java R.java - Программирование Android
BuildConfig.java , R.java Не создаются в папке /gen при создании проекта в eclipse. Переустанавливал программу, ничего не помогает. Что...

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? - Java
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN я не понятно, это исключительно...

Ошибка reference to List is ambiguous; both interface java.util.List in package java.util and class java.awt.List in... - JavaFX
Почему кгда я загружаю пакеты awt, utill вместе в одной проге при обьявлении елемента List я ловлю такую ошибку. 'listTest.java':...

Java.lang.IllegalArgumentException в нативных функциях (embedded Java, MicroEJ, STM32F4Discovery) - Микроконтроллеры
Добрый день! Пытаюсь связать embedded Java и C посредством нативных функций. Идея в следующем: мне нужно вернуть из нативной...

Java сервер Flash клиент java.io.StreamCorruptedException: invalid stream header - Java EE
Есть класс сериализованный на стороне java (сервер) и actionscript(клиент). При попытке передачи объекта от клиента к серверу вылетает...

15
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.10.2013, 03:56 #2
ссылка на текущий объект. в данном случае MainActivity.
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 440
31.10.2013, 09:40 #3
Цитата Сообщение от V0v1k Посмотреть сообщение
ссылка на текущий объект. в данном случае MainActivity.
У меня встречный вопрос.
Иногда при передаче параметра в ф-ю не принимает значение "MyActivity", зато принимает "MyActivity.this".
Я правильно понимаю, что MyActivity - объект, а требует ссылку?
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
31.10.2013, 12:07 #4
В java|android вы не работаете с объектами, а работаете с ссылками на объект. MyActivity - имя класса, MyActivity.this - ссылка на объект
1
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2013, 02:20 #5
Цитата Сообщение от Slon747 Посмотреть сообщение
У меня встречный вопрос.
Иногда при передаче параметра в ф-ю не принимает значение "MyActivity", зато принимает "MyActivity.this".
Я правильно понимаю, что MyActivity - объект, а требует ссылку?
MyActivity - название класса, а MyActivity.this это уже ссылка на текущий объект данного класса.
Цитата Сообщение от lavan Посмотреть сообщение
В java|android вы не работаете с объектами, а работаете с ссылками на объект. MyActivity - имя класса, MyActivity.this - ссылка на объект
а если я пишу например следующее:
Java
1
new MyThread().start();
где тут ссылка?
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
06.11.2013, 17:52 #6
Цитата Сообщение от V0v1k Посмотреть сообщение
а если я пишу например следующее:
Код Java(TM) 2 Platform Standard Edition 5.0
1
new MyThread().start();
здесь вы создаёте анонимную ссылку
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.11.2013, 03:43 #7
Цитата Сообщение от lavan Посмотреть сообщение
здесь вы создаёте анонимную ссылку
вы что-то путаете с анонимными классами. что-то с передачей объектов по значению ссылки. проще говоря - что-то недослышали, что-то недопоняли.
я создаю объект класса MyThread без ссылки.
официальна документация гласит:
Instantiation: The new keyword is a Java operator that creates the object.
переведу на всякий случай: оператор new создает объект (не ссылку)

Добавлено через 24 минуты
и вообще, ООП гласит что все есть объект , а вы тут говорите что мы с ними вообще не работаем.
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 447
07.11.2013, 12:15 #8
В яве же, как таковы нет ссылок... или есть?
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
07.11.2013, 13:17 #9
Цитата Сообщение от V0v1k Посмотреть сообщение
а вы тут говорите что мы с ними вообще не работаем.
и тем не менее, не работаете! в java не много размыто понятие *объект*. Вот здесь
Java
1
Object obj = new Object();
вы получаете ссылку на объект. а вот так вы передаёте анонимную ссылку на объект
Java
1
Thread thr = new Thread(new Runnable(){public void run()})
и на ней запустится метод run
Java
1
thr.start()
Нужно различать в каком контексте применяется слово *объект*
1)объект - выделение памяти под описание(объявляя класс вы говорите компилятору как выделять память под объект).Здесь вы работаете с ссылкой
2)объект - как структурная единица.здесь как раз и работает ваше *всё есть объект*. т.е вы не можете вне класса объявить какую либо переменную базового типа(int)
проще говоря - что-то недослышали, что-то недопоняли.
давайте без пренебрежений
0
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
07.11.2013, 14:37 #10
Цитата Сообщение от lavan Посмотреть сообщение
а вот так вы передаёте анонимную ссылку на объект
нет такого понятия как "анонимная ссылка". потому что это нонсенс.
Цитата Сообщение от lavan Посмотреть сообщение
Thread thr = new Thread(new Runnable(){public void run()})
Это анонимный класс.
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
07.11.2013, 16:07 #11
Цитата Сообщение от Netscape Посмотреть сообщение
Это анонимный класс.
да вы правы.я имел в виду,что все равно создастся объект а в конструктор передастся ссылка на этот объект
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
08.11.2013, 02:58 #12
lavan, Netscape все правильно сказал.

Цитата Сообщение от lavan Посмотреть сообщение
Здесь вы работаете с ссылкой
создаю объекты и работаю с ними посредством ссылок раз уж на то пошло. и то, понятие ссылка упускается, всегда говорят "передать объект" а не "передать ссылку" в професиональном жаргоне.
Цитата Сообщение от lavan Посмотреть сообщение
1)объект - выделение памяти под описание
и об выделение/освобождение памяти мы(джависты) не заботимся, только об освобождение ссылок.
больше сишное определение чем джавишное, а вот второе больше джавишное.
Добавлено через 3 минуты
Цитата Сообщение от lavan Посмотреть сообщение
да вы правы.я имел в виду,что все равно создастся объект а в конструктор передастся ссылка на этот объект
это вы уже про передачу объектов по значению ссылки
не смешивайте понятия.

вот так мы вообще ссылки не имеем:
Java
1
new Object();
как я уже писал выше: где-то недослышали, где-то недопоняли и объединили анонимные классы и передачу аргументов по значению ссылки в что-то свое, вымышленное.

Добавлено через 2 минуты
Цитата Сообщение от lavan Посмотреть сообщение
и тем не менее, не работаете! в java не много размыто понятие *объект*. Вот здесь
Java
1
Object obj = new Object();
вы получаете ссылку на объект.
в первую очередь мы здесь создаем объект класса Object, я вам уже приводил вырезку с официальной документации.
сначала выполняет то, что справа от '=', а именно создание объекта, а только потом идет присваивание. учите мат часть.
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
08.11.2013, 13:19 #13
Цитата Сообщение от V0v1k Посмотреть сообщение
и об выделение/освобождение памяти мы(джависты) не заботимся, только об освобождение ссылок.
если на то пошло,то ссылка ссылается на область памяти выделенной для объекта,а поскольку в java с памятью работает GC то и ссылки удаляет он же,кроме некоторых случаев работы с ресурсами!
Цитата Сообщение от V0v1k Посмотреть сообщение
Добавлено через 2 минуты
Цитата Сообщение от lavan Посмотреть сообщение
и тем не менее, не работаете! в java не много размыто понятие *объект*. Вот здесь
Код Java(TM) 2 Platform Standard Edition 5.0
1
Object obj = new Object();
вы получаете ссылку на объект.
в первую очередь мы здесь создаем объект класса Object, я вам уже приводил вырезку с официальной документации.
сначала выполняет то, что справа от '=', а именно создание объекта, а только потом идет присваивание.
Давайте разбираться по шагово
Java
1
Object obj = new Object()
Объявляется переменная типа класса. Она представляет собой переменную которая может ссылаться на объект. Затем распределяется память под объект(справа от *=*) и возвращается ссылка на него. Эта ссылка представляет собой адрес объекта в памяти распределённой операцией new. затем эта ссылка сохраняется в переменной obj!(Справочник Г. Шилдта) отсюда, объясню для вас и это
Java
1
new Object()
здесь JVM скрывает от вас '=' и все,что находится слева,но алгоритм создания объекта и получения ссылки на него остаётся неизменным!!
советую вам более тщательно читать мат часть!
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.11.2013, 01:43 #14
Цитата Сообщение от lavan Посмотреть сообщение
если на то пошло,то ссылка ссылается на область памяти выделенной для объекта,а поскольку в java с памятью работает GC то и ссылки удаляет он же,кроме некоторых случаев работы с ресурсами!
ссылки на ненужные объекты нужно обнулять что GC смог освободить память занимаемою объектом

Цитата Сообщение от lavan Посмотреть сообщение
здесь JVM скрывает от вас '=' и все,что находится слева,но алгоритм создания объекта и получения ссылки на него остаётся неизменным!!
будьте внимательнее, разговор о том, с чем мы работаем а не JVM. вы же писали "В java|android вы не работаете"

Цитата Сообщение от lavan Посмотреть сообщение
Объявляется переменная типа класса. Она представляет собой переменную которая может ссылаться на объект. Затем распределяется память под объект(справа от *=*) и возвращается ссылка на него. Эта ссылка представляет собой адрес объекта в памяти распределённой операцией new. затем эта ссылка сохраняется в переменной obj!(Справочник Г. Шилдта) отсюда, объясню для вас и это
как я и говорил, в первую очередь создается объекта и мы получаем на него ссылку чтобы посредством ссылки с ним(объектом) работать. или вы меня упрекнули в том, что я не упомянул об объявлении переменной?
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
09.11.2013, 14:51 #15
Цитата Сообщение от V0v1k Посмотреть сообщение
ссылки на ненужные объекты нужно обнулять что GC смог освободить память занимаемою объектом
ничего обнулять не нужно! как только у ссылки закончится 'время жизни' или она выйдет из область видимости GC её удалит,кроме случаев работы с ресурсами, но такие ссылки имеют методы которые говорят GC, что работа с ссылкой закончена
Java
1
2
FileInputStream fis .....
fis.close()
Цитата Сообщение от V0v1k Посмотреть сообщение
будьте внимательнее, разговор о том, с чем мы работаем а не JVM. вы же писали "В java|android вы не работаете"
я внимателен,а вот вы путаетесь в понятиях и определениях это наверно от того,что где то, что то, слышали но вникать не стали.
Java
1
new Object()
создание объекта и возвращение ссылки на него, выполнит jvm. а теперь мы работаем с ссылкой
Java
1
new Object().someMethod()
Цитата Сообщение от V0v1k Посмотреть сообщение
или вы меня упрекнули в том, что я не упомянул об объявлении переменной?
я вас ни в чём не упрекал. вы спросили
а если я пишу например следующее:
Код Java(TM) 2 Platform Standard Edition 5.0
1
new MyThread().start();
где тут ссылка?
и я вам уже третий день объясняю где она здесь!
0
09.11.2013, 14:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2013, 14:51
Привет! Вот еще темы с ответами:

При работе JVM обвалвается java c кодом Java Result 1073807364. - Java
При работе JVM обвалвается java c кодом Java Result 1073807364. Если кто-нибудь знает, помогите пожалуйста.

Что оптимальнее для почтового сервиса - java.IO или java.NIO? - Java Сети
Пишу серверную часть мобильного приложения под Android на JDK, в которое будет интегрирован почтовый сервис, подгрузка новостей, личный...

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома - Java
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...

Создать Windows приложение на Java в NetBeans (Java Desktop Application) - JAVA IDE
Здравствуйте. Хочу создать Windows-приложение на Java с помощью NetBeans 7.3. При создании нового проекта в подразделе «Java» должен быть...


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

Или воспользуйтесь поиском по форуму:
15
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru