好像。。。不太对。不只是主类,所有类的后面都是通常三部分(实例域、构造器、其他方法),实际上块A到底在哪儿是不确定的,因为对象都是堆上分配空间,栈上分配名称(更准确说是引用,不是指针),A也可能包含静态变量,(所有的变量都)可以直接初始化,这部分工作在主方法执行之前(因为一个类可以没有主方法,但是这个类仍然给一些变量分配空间了)。尤其是基本数据类型,全都是运行时自动初始化,然后执行主方法的。你注释的那句话是因为自己调用的语句是需要委托给方法的,就像C语言的printf语句你写在主函数外面,没有委托给函数也是无法执行的。所以执行一个类,你就看主方法就完了。后续学习Awt,Swing,Thread这些东西的时候你会发现程序并不是完全按照你书写代码的顺序执行的,因为编译原理说明了代码优化(外提、规约变量等)在编译期间会执行无数次,堆栈分配的全局和局部display表也被修改无数次,确实也引起一些麻烦。Java 7 及之前,如果你只写:static
{
System.out.println("ABC");
}
这部分代码就可以在主方法运行之前执行,甚至就是主方法。还有很多方法能让主方法执行之前执行一些语句,网上有许多参考。
说了一堆废话,就一句重要的:从主方法找入口,剩下的任务就是阅读方法体了,别刻意纠结执行顺序。