Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特殊变量“quot;这";确切地知道在JAVA程序中引用哪个对象?_Java_Oop_Variables_Object_This - Fatal编程技术网

特殊变量“quot;这";确切地知道在JAVA程序中引用哪个对象?

特殊变量“quot;这";确切地知道在JAVA程序中引用哪个对象?,java,oop,variables,object,this,Java,Oop,Variables,Object,This,如果特殊变量此引用正在使用的变量/方法中的对象。它如何从程序中的各种对象中准确地知道它必须引用哪个对象?此指向 如果使用包含此引用的方法()定义一个类a,则创建该类的两个实例 A a1 = new A(); A a2 = new A(); 如果调用a1.method(),则此将引用a1,如果调用a2.method(),则此将引用JAVA语言规范中的a2 关键字this只能在实例方法的主体中使用, 实例初始值设定项或构造函数,或在 类的实例变量。如果它出现在其他任何地方,则 发生编译时错误

如果特殊变量
引用正在使用的变量/方法中的对象。它如何从程序中的各种对象中准确地知道它必须引用哪个对象?

指向

如果使用包含此引用的
方法()
定义一个类
a
,则创建该类的两个实例

 A a1 = new A();
 A a2 = new A();

如果调用
a1.method()
,则
将引用
a1
,如果调用
a2.method()
,则
将引用
JAVA语言规范
中的
a2

关键字this只能在实例方法的主体中使用, 实例初始值设定项或构造函数,或在 类的实例变量。如果它出现在其他任何地方,则 发生编译时错误

当用作主表达式时,关键字this表示一个值 这是对为其创建实例方法的对象的引用 调用(§15.12),或调用正在构造的对象

它的类型是C类,关键字this出现在C类中

在运行时,引用的实际对象的类可能是 C类或C的任何子类

关键字this也用于特殊的显式构造函数中 调用语句,它可以出现在 建造商主体(§8.8.7)

你也可以参考

在实例方法或构造函数中,这是对当前对象的引用,即调用其方法或构造函数的对象。您可以使用以下方法从实例方法或构造函数中引用当前对象的任何成员


这是一个非常重要的关键字,可以区分父类和子类对象<代码>此
指的是当前上下文,在该上下文中对象也被引用了

机制简单得令人失望

每个实例方法实际上比您为其声明的多接受一个参数,并且该额外参数被分配给
this
。Java语法只是稍微掩盖了这一点。当你写作时

list.get(0);
你确实写过

get(list, 0);
以稍加修改的方式。Java运行时通过检查第一个参数的类型并在其类中定位适当的
get
方法来解析要调用的
get
方法

A a = new A(); 
a.doSomething(i)  // is same as calling doSomething(a, i). 

因此,在内部
这个
指的是“a”。函数的第一个参数是对象(所有对象只使用一个方法)。因此,参数
o
将是调用此函数的当前对象

像往常一样回答得很好@MarkoTopolnik