java是一门面向对象的程序语言。那么在面向对象的时候,工作的顺序到底是怎么样的呢?下面就来做个实验吧。先编写一个 Tset类,跟一个Person类;

如下所示,Test中包含了各种属性方法。

java 初始化 private对象 java中如何初始化对象_加载

接下来我们就new一个新的对象.

java 初始化 private对象 java中如何初始化对象_初始化_02

看看输出的结果:

java 初始化 private对象 java中如何初始化对象_类的加载_03

先输出的是静态代码块,然后是构造代码块,然后是构造方法。

再new一个对象看看:

java 初始化 private对象 java中如何初始化对象_类的加载_04

java 初始化 private对象 java中如何初始化对象_java 初始化 private对象_05

静态代码块是用来初始化一个类的,也可以看做是给一个类做注释。所以只运行了一次。构造代码块是给所有的对象做初始化用的。

所以每new一个新的对象,都会调用一次。接下来调用的才是构造函数。用来给具体的对象做初始化。

我们知道,静态的方法跟变量,随着类的加载就已经加载了,也就是在new对象之前就已经放进了方法区了。

所以在没有new 对象的时候,就可以直接用类名调用,下面给两个例子:( 左边没有new对象,右边有new对象)

java 初始化 private对象 java中如何初始化对象_初始化_06

                               

java 初始化 private对象 java中如何初始化对象_java 初始化 private对象_07

对比一下,看的出来,静态的成员变量跟方法,都可以在没有new对象的时候就调用了。因为他们随着类的加载就已经被加载了。

此时静态成员变量已经进行了默认初始化(String的默认值是null).

而在没有new对象的时候,普通的方法跟成员变量,直接用类名调用会报错。因为他们并没有随着类的加载而加载。

那普通方法有没有被加载呢?其实是有的,只不过加载后,还没有被激活,只有对象调用的时候才会被激活。

因为,我们可以总结如下,在new一个对象的时候的步骤:

1.在new一个对象的时候,会用到这个类,所以首先会把这个类加载进入内存。

2.如果有static代码块,那么就会首先执行。没有就不执行。

3.接下来静态方法跟静态变量也随着类的加载而加载,并存放入方法区,处于激活状态。而普通方法也会随着类的加载而加载,放入方法区,不过并没有激活

,只有 用对象去调用的时候才会被激活。

4.在对内存创建一块内存,属于该对象。里面拥有对象属性,并对其进行默认初始化。

5.执行构造代码块,对所有的对象进行初始化。没有则不执行。然后执行构造函数,对当前对象进行初始化。

6.将对内存中的对象地址赋予栈内存中的引用。

然后对象就创建好啦。

本人学习不久,如果有错误的地方,希望各位大神能给予指正。谢谢~~