Java this关键字

  1. this是一个关键字,翻译为:这个

  2. this是一个引用,this是一个变量,this变量中保存了内存地址指向自身,this存储在JVM堆内存Java对象内部。

  3. 创建100个对象,每一个对象都有this,也就是说有100个不同的this

  4. 没有static关键字的方法被称为实例方法

  5. 没有static关键字的变量被称为实例变量

  6. 实例变量、实例方法在堆内存中存储,所以访问该数据的时候,必须先创建对象,通过引用方法访问。

  7. this可以出现在“实例方法”中,this指向当前正在执行的对象。(this代表当前对象)

  8. this在多数情况下都可以省略不写。

    • 用来区分局部变量和实例变量的时候this不能省略
  9. 如果一个程序执行过程中没有“当前对象”,因为带有static的方法是通过类名的方式访问的,或者说这个“上下文”当中没有"当前对象",自然也不存在this(this代表的是当前正在执行这个动作的对象)

  10. this不能使用在带有static方法中

例如以下没有当前对象程序:

public class User{
  public String name;
  public static String getName(){
    return this.name;
  }
}

以上程序在编译过程中报错connot be referenced from a static context.

name是一个实例变量,以上代码的含义是:访问当前对象的namegetName没有当前对象,自然也不能访问当前对象的name。如果static要访问实例变量,必须通过实例化对象访问。例如User u = new User();

以下程序不会出现空指针异常:

public class MainApplication{
  public static void main(String[] args){
    User u = new User();
    u = null;
    System.out.println(u.getName());
  }
}

class User{
  public static String getName(){
		return "getName";
  }
}

带有static的方法,其实既可以采用类名的方式访问,也可以采用引用的方式访问,但是即使采用引用的方式去访问,实际上执行的时候和引用指向的对象无关。

this内存结构图

image.png

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×