“类的当前实例与类对象不是同一概念,他们指向的对象不相同”
这句话对吗?能解释一下吗?
类的当前实例是实例在运行时的概念,所谓运行时是指程序运行的时候。比如说,在程序运行时,A类被实例化成为10个对象,这10个对象都是A类实例。而类的当前实例是指实例本身说的,如这10个对象是a1,a2...a10,a1作为A类实例,a1当前实例就是a1自己。a1的this就是a1,不是其它的(如a2,a3...a10)。
可即便理解了以上的解释,也许你还会问,那a1,a2...a10都是A的实例,又有什么联系和区别呢?你可以这样理解这个问题,类的概念是确定了它的实例有哪些属性,并为这些属性赋予了默认值(非基本数据类型的属性默认值可能是null),且确定了实例的行为(方法)逻辑。但是,类的实例在运行时,属性值可能被改变。与之相反的,实例在运行时,它的行为逻辑是肯定与类的行为实现保持一致。换句话说,类的实例之间,行为一致,属性一致,但属性的值不尽一致;由于行为逻辑与属性值相关,所以实例行为发生后的结果也不尽一致。也就是说,a1,a2...a10的属性值可能不完全一致,但是他们的属性定义、行为逻辑都是一致的,行为发生后的结果不一定一致。
总而言之,this是指这个类被实例化后的实例(对象)自己。a1的this就是a1,不是a2,a3...a10。
如果还是不懂,我们可以这样讲,人是一个类,它有属性,姓名、年龄、健康程度;有行为,说话、行走。张三、李四、王五都是人的实例,张三姓名属性值为张三,年龄属性值为18,健康程度属性值为良好;李四姓名属性值为李四,年龄属性值为20,健康程度属性值为口吃;王五姓名属性值为王五,年龄属性值为30,健康程度属性值为瘸子。无论张三、李四、王五,他们的“说”行为逻辑都被人这个类确定好了,肺部出气,声带振动,口腔共鸣;“行走”行为逻辑也被人这个类确定好了,大腿动、小退动,掌握平衡。但是,说和行走这两个行为逻辑虽然一样,但都与健康程度属性值有关,所以张三正常说话、正常行走;李四说话口吃,行走正常;王五说话正常,行走跌瘸。张三的this是张三自己,this的属性值、行为逻辑、行为结果均与张三一致。
对于张三这个实例来讲,人这个类的实例的当前实例是张三。
人这个类的类实例有张三、李四、王五。
类的当前实例是针对实例本身讲的;类的实例是指代所有从这个类实例化出来的所有对象。当前实例和类实例不是一个领域里面的概念。
就是说addMouseListener在哪个类里,this就指哪个类的实例对吧?
还有this是一个监听器对象吗?怎么理解监听器对象??
是,this就是那个类的实例。
this就是个监听器对象,监听器对象就是实现了特定监听方法的实体类对象。
这是一种设计模式,比如一个Frame,你想在鼠标移动时做点什么,可是设计Frame本身时并不知道你将来做什么,于是它接收到鼠标移动事件时,就委托给监听对象来实现,于是设计了监听接口类,你只要实现了监听接口类的特定方法,Frame就能调用
就是说
举个简单例子:pulic class A implements ActionListener{
……
Button button;
button.addActionListener(this);
……
}其中的this是指类A的实例,而不是类Button的实例,对吧?还有this可以用类的对象代替吗??
对,this是指类A的实例,而不是类Button的实例
this是可以用类的对象代替的
在网上查了会,说:“类的当前实例与类对象不是同一概念,他们指向的对象不相同”。
这对吗?下面这个程序我将this换为类的对象,没报错,但运行不出之前的效果:
//实现在appletviewer中鼠标简单的作画程序
package applet;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
“类的当前实例与类对象不是同一概念,他们指向的对象不相同”,这句话没错,但是this是类对象的特例;你的程序用法也对,但是你的程序有毛病啊,只能画一个点