我也不知道非静态方法是什么时候进如方法区的。
不过可以自己做一个逻辑推理:
首先只有静态方法能类名调用,而非静态方法只能用对象调用,
第一步推断 静态方法用类名调用是因为 他出现的时候已经有类的存在,所以类能调用。不存在对象,所以对象调用不了。
那么把这个原因套到非静态方法里的话,我门可以推出
第二步 对象能调用非静态方法是因为非静态方法出来的时候,已经有对象的存在,所以对象才能调用该方法。
由此得出
第三部推断 非静态方法应该在建立对象的过程中加载进内存的。
但究竟是哪一步加载进去的呢?
对象实例化过程 首先 (1)编译程序 产生.class文件,-------》(2)然后 加载.class文件的同时加载了静态部分,-----------》 (3)再接着 给对象分配内存地址 ,——————》(4)进行默认初始化,--------》(5)然后再进行显示初始化,-------》(6)构造函数初始化--------》(7)对象创建成功。
做出推断4 非静态方法的建立过程必然 在(2)以后,这个很明显,不多说。
也必须在(6)之前,因为构造函数也包含在 非静态函数中,这里不加载非静态函数 就调用不了构造函数。
第五步推断 经过默认初始化后 对象中才读取 class 中的内容对已经赋值的 成员属性进行显示初始化,也才涉及到 类中的非静态方法
所以最后 下结论,非静态方法 应该实在对象建立过程中进行 显示初始化时才 加载的。
这是我自己的思路,谁有更权威的资料的话,欢迎教导
|