先推荐两个非常厉害的讲解博客。第一个大佬讲的深入浅出非常牛逼他的其他几篇博客也建议看看,第二个的代码示范准备的很不错
我就随便做一下笔记:
一. 加载
二. 连接–>
- 验证
- 准备
- 解析
三. 初始化
讲一讲很重要的类和对象的属性赋值的时机问题。
分成类和对象两个部分:
类的方法是加载时期放到方法区的,类的静态属性在准备时开辟内存赋默认值,在初始化的时候按代码顺序执行赋值,赋上你规定的值。类的普通属性不用开内存和赋值,反正你无法访问。
对象的方法和静态属性与类公用,去方法区拿。对象的普通属性在构造器执行前赋默认值和赋你规定的值,然后在构造器里你还可以第三次对属性赋值。
所以除了局部变量(方法里的变量)之外,其他变量都有默认值。至于为什么局部变量没有,这应该是一个工程学的问题,而不是什么局部变量在栈里所以没有,这显然在搞笑。