this、static、super、final关键字

创建对象分为四步:

1.分配对象空间,并将对象成员变量初始化为0或非空

2.执行属性值的显式初始化

3.执行构造方法

4.返回对象的地址给相关变量

this关键字:

this的本质是“创建好的对象的地址”,在构造方法中使用this代表“当前对象”。

this最常见的用法:

1.在程序产生二义性之处,应用this指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。

2.使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中使用,并且必须位于构造方法的第一句。

测试实例:

 

 

3.this不能用于static方法中。  结合之前文章的内存分析图

 

如果在study写this.id;在对象中会很容易找到id变量,如果在方法区中使用this,因为存储的是类信息而不是对象,所以找不到,在static方法中不能调用this。

 

static关键字:

在类中,用static声明的变量是静态成员变量,也称类变量。类变量的生命周期和类相同,在整个应用程序执行周期内都有效。

static修饰的成员变量和方法,从属于类;普通变量和方法从属于对象。

 

 

 

内存分析:

静态初始化块构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。

注意事项(学完继承再来看这里):1.上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到目标类的静态初始化块为止。

2.构造方法执行顺序和上面顺序一样。

 super关键字: 是直接父类对象的引用。可以通过super来访问被子类覆盖的方法和属性。

 

构造器的第一行代码没有显式的调用super( )或者this( ),那么java默认调用super(),含义是调用父类的无参数构造方法,super( )可以省略。

 

 

final关键字:1.修饰变量:被修饰的变量不可改变,一旦赋了初值,不能被该变

 

2.修饰方法:该方法不可被子类重写,但是可以被重载

3.修饰类:被修饰的类不能被继承,如String类,Math类