JAVA进阶(二)this、static及参数传递机制

前言

      经过前一节的学习,大家对面向对象的概念有了一个初步的认识,接下来继续讲解相关内容

范例

1.this关键字

我们回忆一下对象的创建步骤:

  • 分配对象空间,并将对象成员变量初始化为0或null(实际上该步骤已经在堆内存开辟了有具体地址的一块空间)
  • 执行属性值的显式初始化
  • 执行构造方法
  • 返回对象在堆内存的指定地址给相关变量

实际上,在调用构造方法之前,对象的地址已经确定,也就是引用已经确定,java用this关键字表示本类对象的引用。

(1)使用this关键字调用本类属性

(2)使用this关键字调用本类方法

JAVA进阶(二)this、static及参数传递机制_第1张图片

 大家有没有发现,我们这两个构造方法实际上已经构成重载了!!!

2.static关键字

在类中,用static修饰的成员变量叫做静态成员变量,也称之为类变量。类变量的生命周期和类相同。

我们回忆一下,之前讲解的变量的分类中提到的内容

JAVA进阶(二)this、static及参数传递机制_第2张图片

同样道理,在类中,用static修饰的方法叫做静态方法,从属于类,生命周期和类相同。可由类直接调用

相对的,普通成员变量和方法从属于对象,由对象进行调用

JAVA进阶(二)this、static及参数传递机制_第3张图片

 3.静态初始化块

语法:static {语句体}

作用:与构造方法用于对象初始化不同的是,静态初始化块用于类的初始化操作。也就是说,static语句块的执行要先于构造方法执行。

注意:如有继承关系(这个后面讲解,这里先了解即可)静态初始化块的执行顺序要遵循先父类后子类的顺序执行,构造方法同样如此。

范例:普通语句块(这里的普通语句块和方法内部的还不太一样,一说称之为构造块),静态初始化块,构造方法这三个在创建对象时的执行顺序是怎样的呢?

JAVA进阶(二)this、static及参数传递机制_第4张图片

显然:静态语句块-->普通语句块-->构造方法

 4.java参数传递机制

举两个十分经典的例子给各位观众老爷

(1)用一个方法来改变传递进入参数的值,发现没改变?为啥?

JAVA进阶(二)this、static及参数传递机制_第5张图片

(2)用一个方法来改变传递进去的某个对象的属性值,竟然改变了!!!为什么?

 JAVA进阶(二)this、static及参数传递机制_第6张图片

请读者用内存分析的方式自己尝试去解决这个疑惑,不懂的可以问博主。 

你可能感兴趣的:(Java)