想知道用JAVA寫"計算機程式"中這行"this"的用法??

這是我在網路上找到,別人用JAVA寫的"計算機"程式其中的片段,請問下面程式碼中""b[i].addActionListener(this);"""",這行括號中的(this)代表的是甚麼意思??

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class Calculator extends JFrame implements ActionListener

{

Container c ;

JTextField result ;

JPanel p = new JPanel();

JButton b[] = new JButton[16];

String s[] = {"0","1","2","3","4","5","6","7","8","9","+","-","/","*","=","C"};

//----------------------Me------------------------

String Screen="",monitor1="",monitor2="",OperationOnScreen="";

boolean CommandEmpty=true,switcher=true;

double R=Integer.MIN_VALUE,L=Integer.MIN_VALUE;

//------------------------------------------------

public Calculator ()

{

super ("Casio ^_^");

c=getContentPane();

result = new JTextField();

result.setEditable(false);

result.setBackground(Color.cyan);

p.setLayout(new GridLayout(4,4));

for (int i=0;i<16;i++)

{

b[i] = new JButton(s[i]);

b[i].addActionListener(this);

p.add(b[i]);

}

3 個解答

評分
  • 5 年前
    最佳解答

    JAVA 語法裡面

    用 super 表父類別,用 this 表當前類別

    所以這邊 this 的意思就是 Calculator 這個類別

    可以用 this 做呼叫

    例如 :

    class Person {

    int age;

    void setage(int age)

    {

    this.age = age;

    }

    }

    this.age = age 這個意思是

    當呼叫到 setage 這個函式的時候,會傳一個參數近來,此參數叫 age,

    這個傳進來的參數 age 被 assign 給 Person 這個類別裡面的變數 age 存起來

    所以如果傳進來是 5,那麼 Person.age 等於 5

    有問題可以提問 : )

    2014-12-16 23:25:40 補充:

    給意見1

    誰亂交= =

    靜態只看程式碼不看動態呼叫this的確是指所屬的class

    原PO只問程式碼的this代表甚麼意思我哪裡說錯

    當然動態呼叫傳進去的就不一定是這個class

    2014-12-17 23:08:53 補充:

    給意見3

    好笑勒 我會那樣打指示表示傳進來的age是放在Person類別裡面

    我有說是那樣呼叫的? 虛擬碼沒用過?

    2014-12-17 23:10:38 補充:

    這樣就可印出你的要求

    public class Person {

    int age;

    void setage(int age)

    {

    this.age = age;

    }

    public static void main(String[] args) {

    Person p1=new Person();

    Person p2=new Person();

    p1.setage(1);

    p2.setage(2);

    System.out.print(p1.age);

    System.out.print(p2.age);

    }

    }

    2014-12-18 23:37:39 補充:

    回意見4:

    你是把傳進去的值直接做判斷 ~

    我是把結果印出來,如果結果是對的,裡所當然你的判斷式也就會過

    不太懂你說我哪裡觀念不對Q_Q

    2014-12-19 23:00:16 補充:

    ㄜ .. 就中文表達不大好 =.=

    參考資料: me
  • John
    Lv 7
    5 年前

    我都想加隻腳落嚟。問得這條問題的人都唔會明白妳們講什麼又何必咁計較呢。

    我想了很耐但都唔願出手。就是自知學識不第。妳能出手而且又有例已算唔錯了。

    首先如果這樣回答會好點。"用 this 表示當前這個物件本身"。要知道class 同 object係有唔同的。妳已經答咗啦,靜態和動態根本唔入這個議程,無謂講。

    根據java既公司oracle都係咁講,"this" 係指"current object" (this 表示當前這個物件本身)。

  • 阿平
    Lv 4
    5 年前

    別亂教,this是指"這個物件本身"

    http://openhome.cc/Gossip/Java/This.html

    19.3 事件處理

    https://github.com/JustinSDK/JavaSE6Tutorial/blob/...

    b[i].addActionListener(this);

    說簡單點就是按鈕按下去之後要叫誰處理事件,剛好這個物件自己可以處理事件,所以就叫自己處理。

    2014-12-17 21:03:10 補充:

    Arthur的範例如果是對的

    Person p1=new Person();

    Person p2=new Person();

    p1.setage(1);

    p2.setage(2);

    請印出Person.age給我看看

    建議你看看這個

    https://github.com/JustinSDK/JavaSE6Tutorial/blob/...

    2014-12-18 20:43:39 補充:

    Arthur的方法就是把資料存進"物件"無誤,所以才能從物件取值出來。

    你會寫程式但觀念有問題,有個簡單的方法能測試this是不是物件本身

    void setage(int age,Object obj){

    this.age = age;

    if(this==obj)

    System.out.println("this==obj");

    }

    p1.setage(1,p1);

    p2.setage(2,p2);

    2014-12-19 20:52:10 補充:

    注意措辭,this是指"這個物件本身",而不是"物件的類別"。

    int age;//每個物件都有這個變數,類別沒有

    static int age;//只有類別有這個變數,物件沒有

    p1.setage(1,p1);

    p2.setage(1,p1);//雖然p1.age=p2.age=1但this!=obj(物件不同,p1!=p2)

    2014-12-19 20:56:36 補充:

    這個傳進來的參數 age 被 assign 給 Person 這個類別裡面的變數 age 存起來

    應該改成

    這個傳進來的參數 age 被 assign 給物件裡面的變數 age 存起來

    措辭不同意思差很多

還有問題?馬上發問,尋求解答。