java 实例化深层求教!
本人新手刚接触java不久!求大神赐教。。
1.
java 虚拟机加载类后会对类的局部变量进行初始化!
是不是就是说
class hello{
public String a = "hello";
}
其实变量a此时已经有了字符串"hello"的地址!
2.
以下为猜测 希望大神指点下
如果1 中说的正确
那么就是说 其实 类和实例都差不多
在内存中他们都有各自的空间,并都初始化过
不同之处在于实例是经过构造函数修改过后的类
3.
如果2 正确
是不是类在实例化时!
首先是给出一个类的副本,
然后运行构造函数修改此副本
结果就是最后的实例
------解决方案--------------------1.错。只有静态变量才会在类加载的时候分配地址,你的类实际上是存储在jvm字节码内存中。只有对象被实例化之后,属性才会分配地址。
2,3就不用回答了吧
------解决方案--------------------1.这个时候a和hello都作为一些静态字符串保存在.class文件里。或者已经被读到内存中
2.有各自的空间是对的,至于实例化,只有你new(包括各种……)它的时候,才会发生。将这个class的定义读入虚拟机的过程可以认为是load,而生成一个实例的时候才是initiate,一般第一次new这个class或者调用这个class的静态方法,会触发load。
3.没有副本一说