在一个不涉及父类、重载的简单的对象初始化过程中,(1)在内存中产生一个对象,所有属性默认初始化。(2)、绑定构造器,为形参分配内存,并将实参的值赋给形参。(3)、对一些属性显式赋值(如果在定义时同时赋值)。(4)、执行构造器中剩余的代码。     我是想问,要如何用代码来验证3的显式赋值是在2和4之间进行的,而不是在它们之外。

解决方案 »

  1.   

    public class ClassTest {  private int value = getValue("value");  public ClassTest() {
        int classValue = getValue("Constructor");
      }  public static void main(String[] args) {
        new ClassTest();
      }  private static int getValue(String who) {
        System.out.println(who + " called me!");
        return 1;
      }
    }
    输出:
    value called me!
    Constructor called me!
      

  2.   

    这个楼主,你要先去了解下常量池的概念起,去看看《深入JAVA虚拟机》,开始可能看起来很吃力,多看几遍,慢慢体会就会有体会.PS:这本书如果看不懂,建议先看《操作系统概念第六版》
      

  3.   

    楼主的第二步从哪得来的:
    (2)、绑定构造器,为形参分配内存,并将实参的值赋给形参。构造器还没有调用就为形参分配内存了?方法还没调用没道理在栈上分配内存啊。至于第三点在第四点调用之前调用,这个是好验证的:public class Test {

    private int a = init();

    private int init(){
    System.out.println("init method");
    return 88;
    }
    public Test(){
    System.out.println("构造函数");
    }
    public static void main(String[] args) {
    new Test();
    }
    }
    打印结果:
    init method
    构造函数
      

  4.   

    你用javap 这个命令运行一下class文件你就知道了!
      

  5.   

      那个 疯狂java讲义系列的一本书 《突破程序员的16课》里面有讲到这个的
      

  6.   


    深入java虚拟机一书的168页,讲的明明白白的: