本人新手刚接触java不久!求大神赐教。。
1.
  java 虚拟机加载类后会对类的局部变量进行初始化!
  是不是就是说
  class hello{
    public String a = "hello";
  }
  其实变量a此时已经有了字符串"hello"的地址!
2. 
  以下为猜测 希望大神指点下
  如果1 中说的正确
  那么就是说 其实 类和实例都差不多
  在内存中他们都有各自的空间,并都初始化过  不同之处在于实例是经过构造函数修改过后的类
3.
  如果2 正确
  是不是类在实例化时!
  首先是给出一个类的副本,
  然后运行构造函数修改此副本
  结果就是最后的实例java  实例化 

解决方案 »

  1.   

    1.错。只有静态变量才会在类加载的时候分配地址,你的类实际上是存储在jvm字节码内存中。只有对象被实例化之后,属性才会分配地址。
    2,3就不用回答了吧
      

  2.   

    1.这个时候a和hello都作为一些静态字符串保存在.class文件里。或者已经被读到内存中
    2.有各自的空间是对的,至于实例化,只有你new(包括各种……)它的时候,才会发生。将这个class的定义读入虚拟机的过程可以认为是load,而生成一个实例的时候才是initiate,一般第一次new这个class或者调用这个class的静态方法,会触发load。
    3.没有副本一说
      

  3.   

    第一次发帖,首先谢谢回帖。
    以下是我看后的理解:
    1.把 .class文件加载到JVM内存中!此时每个.class文件就是一个类
    2.当运行代码时 要new 哪个类的对象,就把该 .class文件解释为机器码,并分配地址等等!
    3.机器码运行构造函数初始化对象属性。本来也想看看源码理解的,但是新手看码比较困难!
    还是想先理解下大体框架!
      

  4.   

    第一次发帖,首先谢谢回帖。
    以下是我看后的理解:
    1.把 .class文件加载到JVM内存中!此时每个.class文件就是一个类
    2.当运行代码时 要new 哪个类的对象,就把该 .class文件解释为机器码,并分配地址等等!
    3.机器码运行构造函数初始化对象属性。本来也想看看源码理解的,但是新手看码比较困难!
    还是想先理解下大体框架!

      

  5.   

    第一次发帖,首先谢谢回帖。
    以下是我看后的理解:
    1.把 .class文件加载到JVM内存中!此时每个.class文件就是一个类
    2.当运行代码时 要new 哪个类的对象,就把该 .class文件解释为机器码,并分配地址等等!
    3.机器码运行构造函数初始化对象属性。本来也想看看源码理解的,但是新手看码比较困难!
    还是想先理解下大体框架!


    谢谢啦!  怎么给分啊!
      

  6.   

    第一次发帖,首先谢谢回帖。
    以下是我看后的理解:
    1.把 .class文件加载到JVM内存中!此时每个.class文件就是一个类
    2.当运行代码时 要new 哪个类的对象,就把该 .class文件解释为机器码,并分配地址等等!
    3.机器码运行构造函数初始化对象属性。本来也想看看源码理解的,但是新手看码比较困难!
    还是想先理解下大体框架!


    谢谢啦!  怎么给分啊!
    结贴给分啊