This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -313,7 +313,7 @@ b
</code></pre>
<p>你可以看下这张图。其中 static 字段和 static 代码块,是属于类的,在类的加载的初始化阶段就已经被执行。类信息会被存放在方法区,在同一个类加载器下,这些信息有一份就够了,所以上面的 static 代码块只会执行一次,它对应的是 <clinit> 方法。</p>
<p>而对象初始化就不一样了。通常,我们在 new 一个新对象的时候,都会调用它的构造方法,就是 <init>,用来初始化对象的属性。每次新建对象的时候,都会执行。</p>
<p><img src="assets/CgqCHl9ZjveAemjoAAB4J1dCVDo17.jpeg" alt="Lark20200910-102602.jpeg" /></p>
<p><img src="assets/CgqCHl9ZjveAemjoAAB4J1dCVDo17.jpeg" alt="png" /></p>
<p>所以,上面代码的 static 代码块只会执行一次,对象的构造方法执行两次。再加上继承关系的先后原则,不难分析出正确结果。</p>
<h3>类加载器</h3>
<p>整个类加载过程任务非常繁重,虽然这活儿很累,但总得有人干。类加载器做的就是上面 5 个步骤的事。</p>