前言
经过前一节的学习,大家对面向对象的概念有了一个初步的认识,接下来继续讲解相关内容
范例
1.this关键字
我们回忆一下对象的创建步骤:
- 分配对象空间,并将对象成员变量初始化为0或null(实际上该步骤已经在堆内存开辟了有具体地址的一块空间)
- 执行属性值的显式初始化
- 执行构造方法
- 返回对象在堆内存的指定地址给相关变量
实际上,在调用构造方法之前,对象的地址已经确定,也就是引用已经确定,java用this关键字表示本类对象的引用。
(1)使用this关键字调用本类属性
(2)使用this关键字调用本类方法
大家有没有发现,我们这两个构造方法实际上已经构成重载了!!!
2.static关键字
在类中,用static修饰的成员变量叫做静态成员变量,也称之为类变量。类变量的生命周期和类相同。
我们回忆一下,之前讲解的变量的分类中提到的内容
同样道理,在类中,用static修饰的方法叫做静态方法,从属于类,生命周期和类相同。可由类直接调用。
相对的,普通成员变量和方法从属于对象,由对象进行调用。
3.静态初始化块
语法:static {语句体}
作用:与构造方法用于对象初始化不同的是,静态初始化块用于类的初始化操作。也就是说,static语句块的执行要先于构造方法执行。
注意:如有继承关系(这个后面讲解,这里先了解即可)静态初始化块的执行顺序要遵循先父类后子类的顺序执行,构造方法同样如此。
范例:普通语句块(这里的普通语句块和方法内部的还不太一样,一说称之为构造块),静态初始化块,构造方法这三个在创建对象时的执行顺序是怎样的呢?
显然:静态语句块-->普通语句块-->构造方法
4.java参数传递机制
举两个十分经典的例子给各位观众老爷
(1)用一个方法来改变传递进入参数的值,发现没改变?为啥?
(2)用一个方法来改变传递进去的某个对象的属性值,竟然改变了!!!为什么?
请读者用内存分析的方式自己尝试去解决这个疑惑,不懂的可以问博主。