powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Слово "this" в java.
10 сообщений из 10, страница 1 из 1
Слово "this" в java.
    #39693359
Vladimir1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример №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
Слово "this" в java.
    #39693379
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1982Чем Это Отличаеться от этого?
ничем не отличается. Метод addActionListener ожидает в качестве параметра любой объект, реализующий интерфейс ActionListener. В первом случае этот интерфейс реализуется в отдельном классе, во-втором - он реализуется в основном классе - это чисто архитектурная разница

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

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

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

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

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

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

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

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

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


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

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



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

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

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


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

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

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

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

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


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