您的位置:首页 > 编程语言 > Java开发

关于java对像初始化

2013-04-24 23:09 162 查看
当new一个对像时,

首先肯定是为这个对像分配空间,然后进行隐式或显示的初始化。这些在任何java书肯定都会提到。

但有的时候 ,实际应用中仅知道这些就不够了,现将我的测试总结记录如下 :

当完成了以上的显/隐式初始化后,这时候大家就把关注点放在了构造方法那了。

在执行构造方法其实并非完全顺序执行的。

首先要执行的当然是super (注;任何一个构造都必然在第一行包括super,就是没

有显示的写出,系统也会自动隐式加入),

干完super,完事了。这时并不会继续在这构造方法里执行后面的语句。而是另寻新

欢,去执行所new类里的语句块(即在类中单独用{ 和}这两个东西夹起来的那一部分,

当然,如果没有初夹的这些就肯定没有这一步了)。

好了,现在才真正是要执行刚才提到的那个构造方法里的后面的语句了。

但是,当这个有super的构造被类中的其它构造调用,而且在new时,参数所决定的

构造又是那个要调这个构造的构造。即这个构造的第一行是this,(有this当然就没有

super了。当然,系统在第一行还是会有隐式的super)

现在再看是怎么执行构造的:

首先肯定是调用这个参数所决定的构造。在这起初不要忘了,系统可会隐式的在第

一行加了super。是去执行super了。然后才根据this。去找那个有super构造。

当然,我们现在要看那个有super的构造了。执行顺序就如上所述。

     OK了,就回到了这个被决定,即没有super的构造。这时是一种情况了。算是执行

完super了,因为这里没有super。执行类的语句块吗?答案是否定的。真接在构造里执

行后完成的代码。

还有一点也很重要。

假如类里有两个构造方法,而且都没有显示的super。而且构造S1调用了构造S2。

在new时又是用了S1。在执行S1时,首先执行S1里的隐式super。然后执行类里的语句

快,到this,又遇到隐式super了。这回可不执行这个super了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: