Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Слово "this" в java. / 10 сообщений из 10, страница 1 из 1
26.08.2018, 10:25
    #39693359
Vladimir1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Пример №1:

Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Reader extends JFrame{
    JButton b1, b2;
    JLabel l1, l2, l3, l4;
    JTextField t1, t2;
    int i, k;
    String a, b;
    eHandler handler = new eHandler();

    public Reader(String s){
        super(s);
        setLayout(new FlowLayout());
        b1 = new JButton("Очистить");
        b2 = new JButton("Посчитать");
        l1 = new JLabel("Введите первое число:");
        l2 = new JLabel("Введите второе число:");
        l3 = new JLabel("");
        l4 = new JLabel("");
        t1 = new JTextField(10);
        t2 = new JTextField(10);
        add(b1);
        add(b2);
        add(l1);
        add(t1);
        add(l2);
        add(t2);
        add(l3);
        add(l4);
        b2.addActionListener(handler);
        b1.addActionListener(handler);
    }

    public class eHandler implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            try{
                if(e.getSource()==b2){
                    i = Integer.parseInt(t1.getText());
                    k = Integer.parseInt(t2.getText());
                    i++;
                    k++;
                    a = "Ваше первое число теперь равно " + i;
                    b = "Ваше второе число теперь равно " + k;
                    l3.setText(a);
                    l4.setText(b);
                }

                if(e.getSource()==b1){
                    t1.setText(null);
                    t2.setText(null);
                    l3.setText("");
                    l4.setText("");
                }
            }catch (Exception ex){ JOptionPane.showMessageDialog(null, "Введите в поле число"); }
        }

    }
}



Пример №2:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  import java.awt.event.*; 
class MainFrame extends JFrame implements ActionListener{
	@Override
	public void actionPerformed(ActionEvent e){ 
		String command = e.getActionCommand();
		if( command.equals( "add" ))  {
			dispose();
			System.exit(0);
		}
	}
	public JPanel createMainPanel(){
		JButton addBtn = new JButton("Добавить будильник");
		addBtn.setActionCommand("add");
		addBtn.addActionListener(this); 
	} 



Вопрос:

Чем Это:

Код: java
1.
b2.addActionListener(handler);



Отличаеться от этого?

Код: java
1.
 addBtn.addActionListener(this) 



Почему в первом случае в параметрах стоит экземпляр класса, а во втором примере ссылка на него через слово "this"?
...
Рейтинг: 0 / 0
26.08.2018, 11:32
    #39693379
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Vladimir1982Чем Это Отличаеться от этого?
ничем не отличается. Метод addActionListener ожидает в качестве параметра любой объект, реализующий интерфейс ActionListener. В первом случае этот интерфейс реализуется в отдельном классе, во-втором - он реализуется в основном классе - это чисто архитектурная разница

Vladimir1982Почему в первом случае в параметрах стоит экземпляр класса, а во втором примере ссылка на него через слово "this"
почему или зачем? вопрос "почему" лишен смысла, поскольку, как я написал выше, технически нет никакой разницы - в обоих случаях передается ссылка на экземпляр, реализующий ActionListener. Сложно понять, что конкретно тебя смущает, что класс MainFrame внутри себя может сослаться на самого себя только через this?
...
Рейтинг: 0 / 0
26.08.2018, 13:53
    #39693407
Vladimir1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
chpasha,

авторСложно понять, что конкретно тебя смущает, что класс MainFrame внутри себя может сослаться на самого себя только через this?

Да. Я думал, что слово "this" употребляться только 1) в конструкторе 2) вызов конструктора из другого конструктора 3) в геттерах. Еще я встречал такое употребление слова "this":

Код: java
1.
Container container = this.getContentPane();
...
Рейтинг: 0 / 0
26.08.2018, 15:18
    #39693417
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Vladimir1982chpasha,

авторСложно понять, что конкретно тебя смущает, что класс MainFrame внутри себя может сослаться на самого себя только через this?

Да. Я думал, что слово "this" употребляться только 1) в конструкторе 2) вызов конструктора из другого конструктора 3) в геттерах. Еще я встречал такое употребление слова "this":

Код: java
1.
Container container = this.getContentPane();

Слово this может употребляться где угодно, просто в большинстве случаев это необязательно - компилятор "подразумевает" наличие this .
...
Рейтинг: 0 / 0
26.08.2018, 15:38
    #39693418
Vladimir1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
автор Зашедший , Слово this может употребляться где угодно, просто в большинстве случаев это необязательно - компилятор "подразумевает" наличие this.

Этот:
Код: java
1.
Container container = this.getContentPane();


можете мне объяснить, что он означает?
...
Рейтинг: 0 / 0
26.08.2018, 16:14
    #39693422
ponuch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Vladimir1982автор Зашедший , Слово this может употребляться где угодно, просто в большинстве случаев это необязательно - компилятор "подразумевает" наличие this.

Этот:
Код: java
1.
Container container = this.getContentPane();



можете мне объяснить, что он означает?

получить у текущего класса или класса-предка ContentPane
...
Рейтинг: 0 / 0
26.08.2018, 16:57
    #39693429
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Vladimir1982автор Зашедший , Слово this может употребляться где угодно, просто в большинстве случаев это необязательно - компилятор "подразумевает" наличие this.

Этот:
Код: java
1.
Container container = this.getContentPane();


можете мне объяснить, что он означает?Вызвать метод getContentPane() данного экземпляра класса. Собственно, слово this тут является необязательным, компилятор по умолчанию его подставил бы. Единственный вариант, в котором действительно понадобится добавить this при таком вызове - если в класс выполнен статический импорт одноименного метода из другого класса.
P.S. Пытаетесь освоить Java без чтения документации и учебников?
...
Рейтинг: 0 / 0
26.08.2018, 18:12
    #39693438
Vladimir1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
автор Зашедший,P.S. Пытаетесь освоить Java без чтения документации и учебников?

У Шильдта я не встречал описания данного примера.

И еще, по поводу кода который я привел, правильно я понимаю, что чтобы создать "слушателя событий" создается экземпляр "eHandler handler = new eHandler();" от класса "eHandler", потом сам экземпляр "handler" в качестве параметра метода addActionListener(handler) добавляется к кнопкам "b1" , "b2". Правильно я понял?
...
Рейтинг: 0 / 0
26.08.2018, 19:19
    #39693454
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Vladimir1982автор Зашедший,P.S. Пытаетесь освоить Java без чтения документации и учебников?

У Шильдта я не встречал описания данного примера.Странно, у Хорстманна объяснение "this" идет в самом начале главы по ООП. По сути все очень просто - никаких специальных "объектных функций" нет, просто в методы экземпляра класса нулевым (невидимым программисту) параметром передается this - указатель на экземпляр класса, которому "принадлежит" метод.

Vladimir1982И еще, по поводу кода который я привел, правильно я понимаю, что чтобы создать "слушателя событий" создается экземпляр "eHandler handler = new eHandler();" от класса "eHandler", потом сам экземпляр "handler" в качестве параметра метода addActionListener(handler) добавляется к кнопкам "b1" , "b2". Правильно я понял?Совершенно верно. А в другом случае класс сам реализует интерфейс слушателя и передает в качестве параметра ссылку на самого себя.
...
Рейтинг: 0 / 0
26.08.2018, 19:34
    #39693455
Vladimir1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Слово "this" в java.
Зашедший, Спасибо!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Слово "this" в java. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]