当前位置: 技术问答>java相关
简单问题,请各位解答
来源: 互联网 发布时间:2015-05-09
本文导语: import java.awt.*; import java.awt.event.*; public class myException extends Frame implements ActionListener,WindowListener { private TextArea ta; public static void main(String args[]) { myException test = new myException(); Bu...
import java.awt.*;
import java.awt.event.*;
public class myException extends Frame implements ActionListener,WindowListener
{
private TextArea ta;
public static void main(String args[])
{
myException test = new myException();
Button b1 = new Button("安全");
Button b2 = new Button("危险");
test.addWindowListener(test); **********
b1.addActionListener(test);
b2.addActionListener(test);
test.setLayout(new GridLayout(3,1));
test.add(b1);
test.add(b2);
test.ta = new TextArea(null,10,20,TextArea.SCROLLBARS_VERTICAL_ONLY);
test.add(test.ta); *******
test.setSize(300,300);
test.setVisible(true);
}
private void CheckButton(String label) throws exaException
{
ta.append("safe"); *******
...
}
...
}
请问一下,两个问题:
1,test.addWindowListener(test); 换成 test.addWindowListener(this),
我认为this就是指向test的
2, test.add(test.ta); 为什么不能改为test.add(ta)而在下面就可以直接调用
import java.awt.event.*;
public class myException extends Frame implements ActionListener,WindowListener
{
private TextArea ta;
public static void main(String args[])
{
myException test = new myException();
Button b1 = new Button("安全");
Button b2 = new Button("危险");
test.addWindowListener(test); **********
b1.addActionListener(test);
b2.addActionListener(test);
test.setLayout(new GridLayout(3,1));
test.add(b1);
test.add(b2);
test.ta = new TextArea(null,10,20,TextArea.SCROLLBARS_VERTICAL_ONLY);
test.add(test.ta); *******
test.setSize(300,300);
test.setVisible(true);
}
private void CheckButton(String label) throws exaException
{
ta.append("safe"); *******
...
}
...
}
请问一下,两个问题:
1,test.addWindowListener(test); 换成 test.addWindowListener(this),
我认为this就是指向test的
2, test.add(test.ta); 为什么不能改为test.add(ta)而在下面就可以直接调用
|
根本原因是:
类和类的实例是两个的概念,所有对应某一个类的实例共同拥有一段成员函数代码,但各自拥有自己的成员变量,那么成员函数怎样知道要操作的是哪一个变量呢?是通过一个特殊的函数参数this,有了this成员函数就知道要操作那个(对象/实例的)成员变量。
以上没有讨论静态成员(变量/函数)的情况,所有的类的实例在运行时共同拥有一个静态的成员变量(所以静态成员可以认为是类的属性),静态函数同一般的成员变量不一样,因为函数参数中没有this这个参数,也就是在运行时用通常的函数调用方法他不知道自己在操作哪个对象。
所以main是静态的参数中没有this,所以在函数体中当然不能使用this。
而对于 private void CheckButton(String label) 函数实际可认为是:
private void CheckButton(this/类型是对应的类,String label)
所以在这个函数体中你就可以使用这个参数(this)了。
类和类的实例是两个的概念,所有对应某一个类的实例共同拥有一段成员函数代码,但各自拥有自己的成员变量,那么成员函数怎样知道要操作的是哪一个变量呢?是通过一个特殊的函数参数this,有了this成员函数就知道要操作那个(对象/实例的)成员变量。
以上没有讨论静态成员(变量/函数)的情况,所有的类的实例在运行时共同拥有一个静态的成员变量(所以静态成员可以认为是类的属性),静态函数同一般的成员变量不一样,因为函数参数中没有this这个参数,也就是在运行时用通常的函数调用方法他不知道自己在操作哪个对象。
所以main是静态的参数中没有this,所以在函数体中当然不能使用this。
而对于 private void CheckButton(String label) 函数实际可认为是:
private void CheckButton(this/类型是对应的类,String label)
所以在这个函数体中你就可以使用这个参数(this)了。
|
两个问题一个答案:
main是static的,所以没有this.
main是static的,所以没有this.