Java 此.method()正在引用?
我有一个关于Java 此.method()正在引用?,java,this,Java,This,我有一个关于的问题。声明。 假设我这里有一段代码(非常愚蠢和无用,但能传达信息): 类计算{ int x,y; 最终整数g=5; //建造师 公共计算(整数a、整数b){ x=a;y=b; } 公共int sumAddG(){ 返回(x+y+g); } //比较法 公共布尔值相同(在中计算){ 如果(this.sumAddG()==in.sumAddG()){/,则此引用已调用其same()方法的实际实例。例如,获取以下代码: Calculate a = new Calculate(0, 3);
的问题。
声明。
假设我这里有一段代码(非常愚蠢和无用,但能传达信息):
类计算{
int x,y;
最终整数g=5;
//建造师
公共计算(整数a、整数b){
x=a;y=b;
}
公共int sumAddG(){
返回(x+y+g);
}
//比较法
公共布尔值相同(在中计算){
如果(this.sumAddG()==in.sumAddG()){/,则此
引用已调用其same()
方法的实际实例。例如,获取以下代码:
Calculate a = new Calculate(0, 3);
Calculate b = new Calculate(0, 4);
boolean calcFlag = a.same(b);
在这种情况下,方法same()
中的this
将指a
,而中的将指b
此行的更新:
如果(this.sumAddG()。
因此,在您编写的示例类中,如果您声明了一个实例变量,则计算in。然后在if语句条件中,您可以通过将this关键字放在前面来引用它,如:this.in
并通过调用引用方法的参数:
在中,此
始终引用类实例。
this.method()
与返回值无关。某些方法没有要返回的值
它的意思是:请编译器调用这个类实例成员方法
我
this
关键字引用了您正在使用它的类的实例
在您显示的示例中,this.sumAddG()
将引用类Calculate的实例方法。由于您引用的是类实例,因此无法从静态上下文中使用this
。代码中存在多个问题:
您正在静态方法中使用this。
this。
指的是类的当前实例(您所在的计算实例),而静态方法属于类,而不是实例
您将sumAddG()
引用为属性成员(in.sumAddG
),这是错误的,因为sumAddG是一个方法
在您的示例中,如果您希望在自己的类实例中调用该方法,那么可以使用this.
,但是如果您希望在中的另一个实例上调用该方法,那么您可以在.sumAddG()中将其称为
在静态方法中,您不能使用this
,因为静态成员不属于实例,它属于类,因此无法识别this
,因为当前实例不存在
但是,如果您在同一个类中有一个方法,并且希望从静态方法调用它,那么另一个方法也必须是静态的,您可以将其称为:Calculate.MyStaticMethod()
如果您的方法不是静态的,那么this.sumAddG()==in.sumAddG()
实际上会比较实例中调用sumAddG()
的返回值,以及实例中上的sumAddG()
的返回值。代码的当前状态(您的编辑很难遵循)如您所料
this
引用您所处类的实例,因此this.sumAddG()
的结果使用上述字段的当前值。in.sumAddG()
使用中实例的字段,该字段被指定为方法same()
的参数
远程相关:
仅供参考,此处不需要使用this
,因为它是普通调用sumAddG()
的默认行为。这意味着您的if
语句可以是:
if (sumAddG() == in.sumAddG()) { ... }
您不能在静态上下文中使用this
关键字。这将导致编译错误。好的,现在删除静态^^Now?只有一个参数的静态比较方法没有多大意义…aaaaaaaa!>。same
更改为以下内容:公共布尔相同(计算中){返回this.sumAddG()==in.sumAddG();}
因此,如果我想引用使用该类当前实例中的变量的方法的计算,只需编写if(Calculate.sumAddG()==in.sumAddG()){then}…?Calculate
是类的名称,其中a
是一个实例,b
是另一个实例。由于sumAddG()
不是静态的,因此不能调用Calculate.sumAddG()
,只能调用a.sumAddG()
和b.sumAddG()
(或this.sumAddG()
和中的)< /代码>分别在“代码> SAME()/代码>的方法体内。将不同的实例视为不同的接口的起源。如果调用<代码> A.(B),在代码< > SAME()>代码> >代码> < <代码> > < <代码> < <代码> > <代码> > <代码> b>代码>。但是,如果调用“代码> >同一(a))
,b
将由这个引用,而a
将由中的引用。因此,给定上述代码,如果我键入:a.same(b);我将a与b进行比较,其中b.same(a)我将b与a进行比较,(实际上相同,但幕后的事情与此不同。实现正确吗?)是的,这是正确的。通常,这就是为什么equals()
对象的method
被重写,以声明两个对象在语义上是相等的。噢,这就是equals()的原因方法:D非常感谢!^^^因此,如果我想引用这个类的当前实例中使用变量的方法的计算,只需编写if(Calculate.sumAddG()==in.sumAddG()){then}…?使用Calculate.sumAddG()除非类calculate是静态的,否则将无法工作。如果要从类外部调用该方法,则可以创建该类的实例。据我所见,没有静态方法的更新代码应该可以工作,但我还没有测试
return this.sumAddG() == in.sumAddG();
if (<*any boolean expression*>) {
return true;
} else {
return false;
}
if (sumAddG() == in.sumAddG()) { ... }