Java "的重要性;这"; 我在C++中使用COCOS2DX,当添加精灵或对象时,
这个->Java "的重要性;这"; 我在C++中使用COCOS2DX,当添加精灵或对象时,,java,c++,this,cocos2d-x,Java,C++,This,Cocos2d X,这个->addChild(某物)和addChild(某物) 工作。两种方法得出的结果相同 但不仅在c++中,this也用于android编程(也许所有编程语言都使用“this”?)。我在Java中使用它来替换ClassName.class,使用简单的this。但是除了这个目的之外,这个还有很多用途 但是因为我没有深入研究编程语言,我不知道它们是否真的做同样的工作(this->addChild与addChild和ClassName.class与this) 为什么我们需要这个 自我回答: 这是一
addChild(某物)
和addChild(某物)
工作。两种方法得出的结果相同
但不仅在c++
中,this
也用于android编程(也许所有编程语言都使用“this”?)。我在Java中使用它来替换ClassName.class,使用简单的this
。但是除了这个目的之外,这个
还有很多用途
但是因为我没有深入研究编程语言,我不知道它们是否真的做同样的工作(this->addChild
与addChild
和ClassName.class
与this
)
为什么我们需要这个
自我回答:
这是一个关键字,在许多面向对象编程语言中,它指的是当前类实例或对象
所以…只是为了安慰?这个
关键字(或者Python中类似的self
)是一种“引用调用了执行方法的实例”的机制,尽管其含义可能会因语言和上下文而异。这-哈因此,当需要从给定方法中“传递当前实例”时,它非常方便
此外,一些语言要求在调用成员时手动指定此
(或计算结果为实例的其他表达式);也就是说,必须始终指定this
:this.m()
。其他语言允许将this.m()
和m()
等效,其中m
是与当前实例关联的成员函数
类似地,使用Type.m()
通常表示调用在类型上定义的“静态方法”;同样,这是特定于语言的,一些语言支持第一类类型值,其中没有真正的“静态”方法
除了如何定义一种特定的语言之外,没有什么特别的押韵或理由,问题应该集中在特定语言中的特定语境1。对于一种语言的大多数原因,我可以用另一种“OOP”语言给出一个反例
1个例子:您引用的是
ClassName.class
,然而,在Java中,这只是获取相应class
对象的特殊语法,与this
或成员(静态或非静态)无关。在实例方法或构造函数中,此
是对当前对象的引用,即调用其方法或构造函数的对象。您可以使用this
从实例方法或构造函数中引用当前对象的任何成员
在Java中的用法:
这里给出了这个
关键字的6种用法
此
关键字可用于引用当前类实例变量this()
可用于调用当前类构造函数此
关键字可用于调用当前类方法(隐式)此
可以在方法调用中作为参数传递此
可以在构造函数调用中作为参数传递此
关键字也可用于返回当前类实例class student
{
int id;
String name;
student(int id,String name)
{
id = id;
name = name;
}
void display()
{
System.out.println(id+" "+name);
}
public static void main(String args[])
{
student s1 = new student(1,"NameA");
student s2 = new student(2,"NameB");
s1.display();
s2.display();
}
}
输出将是:
0 null
0 null
1 NameA
2 NameB
问题的解决方案:
class Student
{
int id;
String name;
student(int id,String name)
{
this.id = id;
this.name = name;
}
void display()
{
System.out.println(id+" "+name);
}
public static void main(String args[])
{
Student s1 = new Student(1,"NameA");
Student s2 = new Student(2,"NameB");
s1.display();
s2.display();
}
}
输出将是:
0 null
0 null
1 NameA
2 NameB
< C++ >代码> > < /Cord>是一个关键字,它指向调用该方法的对象的指针。 严格地说,为了方便起见,在某些情况下,编译器可以找出在同一对象上调用另一个方法的位置。如果对象具有
fooBar
方法,则可以将其编写为this->fooBar()代码>,或者为了方便起见,您可以只编写fooBar()而编译器将把它理解为this->fooBar()代码>
但是,在其他情况下,确实需要显式地使用this
。如果您希望该方法返回实例本身,请考虑。您必须以某种方式引用实例本身,您可以使用返回这个代码>。或者,如果您想调用另一个函数,比如说barMan
,传入实例本身-同样需要使用this
:barMan(this)代码>此
有一些用途。首先,在某些情况下,您可能需要在当前方法中显式引用receiver对象,如果您将其作为参数传递给另一个函数。例如,考虑C++代码:
void someOtherFunction(SomeClass* arg);
void SomeClass::doSomething() {
someOtherFunction(this);
}
这里,someOtherFunction
是一个自由函数,它获取指向SomeClass
对象的指针。在doSomething
的上下文中调用它以使接收方对象成为参数的唯一方法是使用this
<>代码> C++中的也用于赋值运算符,它需要返回对接收者对象的引用:
MyClass& MyClass::operator= (MyClass rhs) {
// Do something to the receiver object
return *this;
}
这里,返回*this
表示“返回对接收方对象的引用”,如果没有此
,则无法表示该引用
此
也用于在少数情况下消除歧义。例如:
public class MyClass {
private int value;
public MyClass(int value) {
this.value = value;
}
}
这里,在MyClass
构造函数中使用this
是为了区分参数value
和字段value
。单独引用值
会选择参数,而使用则会选择此参数。值
指的是字段
希望这有帮助 还可以考虑一种普通类型的构造函数或setter
public ConstrcutMe (String name, int age)
{
this.name = name;
this.age = age;
}
public void setName (String name) {
{
this.name = name;
}
我相信这充分说明了为什么我们需要this
正如您正确指出的那样,this
关键字用于引用给定类的当前实例
看到<代码是很常见的