创建对象分为四步:
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类