-
this
是一个关键字,翻译为:这个 -
this
是一个引用,this
是一个变量,this
变量中保存了内存地址指向自身,this
存储在JVM
堆内存Java对象内部。 -
创建100个对象,每一个对象都有
this
,也就是说有100个不同的this
-
没有
static
关键字的方法被称为实例方法 -
没有
static
关键字的变量被称为实例变量 -
实例变量、实例方法在堆内存中存储,所以访问该数据的时候,必须先创建对象,通过引用方法访问。
-
this
可以出现在“实例方法”中,this
指向当前正在执行的对象。(this
代表当前对象) -
this
在多数情况下都可以省略不写。- 用来区分局部变量和实例变量的时候
this
不能省略
- 用来区分局部变量和实例变量的时候
-
如果一个程序执行过程中没有“当前对象”,因为带有
static
的方法是通过类名的方式访问的,或者说这个“上下文”当中没有"当前对象",自然也不存在this
(this
代表的是当前正在执行这个动作的对象) -
this
不能使用在带有static
方法中
例如以下没有当前对象程序:
public class User{
public String name;
public static String getName(){
return this.name;
}
}
以上程序在编译过程中报错connot be referenced from a static context.
name
是一个实例变量,以上代码的含义是:访问当前对象的name
,getName
没有当前对象,自然也不能访问当前对象的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
内存结构图
本文由 UpYou 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Nov 9,2020