Java类的基本运行顺序
作者:陈臣 

作为程序员,应该对自己写的程序具备充分的掌控能力,应该清楚程序的基本运行过程,否则糊里糊涂的,不利于对程序的理解和控制,也不利于技术上的发展。

我们以下面的类来说明一个基本的Java类的运行顺序:

public class Test {
 private String name = "Java私塾";
 private int age = 2;
 public Test(){
   age = 1000;//期望能到1000年,呵呵
 }
 public static void main(String[] args) {
   Test t = new Test();
   System.out.println(t.name+”的年龄是”+t.age+”年”);
 }
}





运行的基本顺序是:


(1):先运行到第7行,这是程序的入口


(2):然后运行到第8行,这里要new一个Test,就要调用Test的构造方法


(3):就运行到第4行,注意:可能很多人觉得接下来就应该运行第5行了,错!初始化一个类,必须先初始化它的属性


(4):因此运行到第2行,然后是第3行


(5):属性初始化完过后,才回到构造方法,执行里面的代码,也就是第5行


(6):然后是第6行,表示new一个Test实例完成


(7):然后回到main方法中执行第9行


(8):然后是第10行



运行的结果是:Java私塾的年龄是1000年


说明:这里只是说明一个基本的运行过程,没有考虑更多复杂的情况。



继承中:初始化子类必先初始化父类


有继承的类在运行的时候,一定要记得:初始化子类必先初始化父类,这是Java程序的一个基本运行过程。比如:




public class Test extends Parent{
 private String name = "Java私塾";
 private int age = 2;
 public Test(){
 age = 1000;//期望能到1000年,呵呵
 }
 public static void main(String[] args) {
 Test t = new Test();
 System.out.println(t.name+”的年龄是”+t.age+”年”);
 }
}
class Parent{
 private int num = 1;
 public Parent(){
 System.out.println(”现在初始化父类”);
 }
 public void test(){
 System.out.println(”这是父类的test方法”);
 }
}





上述类的基本运行顺序是:


(1):先运行到第7行,这是程序的入口


(2):然后运行到第8行,这里要new一个Test,就要调用Test的构造方法


(3):就运行到第4行,注意:初始化子类必先初始化父类


(4):要先初始化父类,所以运行到第14行


(5):然后是第13行,初始化一个类,必须先初始化它的属性


(6):然后是第15行


(7):然后是第16行,表示父类初始化完成


(8):然后是回到子类,开始初始化属性,因此运行到第2行,然后是第3行


(9):子类属性初始化完过后,才回到子类的构造方法,执行里面的代码,也就是第5行


(10):然后是第6行,表示new一个Test实例完成


(11):然后回到main方法中执行第9行


(12):然后是第10行



运行结果是:


现在初始化父类


Java私塾的年龄是1000年