Java this关键字

Java class中定义的method(方法)字节码存在方法区中(什么是方法区?请自行搜索Java内存结构),不论有多少基于这个class的对象,这些对象的method都只有一份,就是方法区中的class method字节码,所有这个class的对象调用的method都来自同一片内存。

Class ThisClass {

    void f(int i) { ... }

    public static void main(String args) {

        ThisClass a = new ThisClass();

        ThisClass b = new ThisClass();

        a.f(2);

        b.f(2);

    }

}


上例中a,b所指向的对象调用的f方法实际上是同一片method字节码,那么f method怎么知道是哪个对象调用的自己呢?其实后台调用的时候并非像代码里一样,编译器帮我们完成了一些工作,后台实际调用的时候会把这个对象本身当成f 的第一个参数传进去,像下面这样:

ThisClass.f(a, 2);

ThisClass.f(b, 2);


上面的例子看不出专递对象句柄到method里有什么用,但是如果在f method中需要用到当前调用对象的句柄(比如需要返回当前对象),我们就需要this关键字。this关键字就指向调用这个method的对象。下例来自Thinking in Java 4th Edition

//: Leaf.java 
// Simple use of the "this" keyword 
 
public class Leaf { 
  private int i = 0; 
  Leaf increment() { 
    i++; 
    return this; 
  } 
  void print() { 
    System.out.println("i = " + i); 
  } 
  public static void main(String[] args) { 
    Leaf x = new Leaf(); 
    x.increment().increment().increment().print(); 
  } 
} ///:~ 

this关键字常用于class构造方法中:

class ThisClass {
	int num = 0;
	ThisClass(int i) {
		num = i;
	}
	
	ThisClass() {
		this(10);
	}
}

对于static方法,编译器并没有在后台‘秘密’转入调用它的对象,因为调用static方法不需要对象,所以static method是没有this变量的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值