猿问

如何获取调用方法的实例

class A{

  void Method(){

    //do sth.

  }

}

对于上面这个类,我如何知道 调用method 方法的 对象是哪个啊?

如 我创建了两个对象

A a1=new A();

a1.Method();

A a2=new  A();

a2.Method();

我在Method方法里如何知道是a1调用的 还是a2调用的呢?

也就是说 ,我想在Method里面 获取 调用该方法的实例对象,不知道各位看管听明白了没


拉丁的传说
浏览 554回答 2
2回答

慕哥9229398

你可以在方法体里用this获取到当前对象,但是你无法获取到当前对象的“变量名”。举个例子很容易明白:class A {   public void Method()    {     //this 代表当前实例  } }在Method()中,this代表当前实例,当前实例是堆上的一个唯一的对象,而在栈上可能有99个变量都指向这个对象。A a1 = new A(); A a2 = a1; A a3 = a1; A a4 = a1; ... A a99 = a1; a99.Method();无论是哪个变量调用Method方法,它们指向的堆上的同一个实例,因此对于Method来说,它们没有不同,因此在Method中的this也没有不同。再从另外一方面来反证,假设你可以输出变量名,那么请问这句的输出是什么:new A().Method();
随时随地看视频慕课网APP
我要回答