从main函数谈起的Java初始化

【Java程序的入口方法】写了这么长时间的代码,在用MyEclipse时也一直使用的是输入“main”后利用Alt+/的快速提示直接生成main方法,所以,今天要再次熟悉一下这个Java程序的入口方法的默认格式:public static void main(String[] args){}。

【main方法的其他格式】main方法是JVM识别的特殊方法名,是程序的入口方法。但是main方法不止有上述的唯一一种写法:

① 由于public和static没有先后顺序关系,因此static public void main(String[] args){}也是正确的写法。

② main方法可以被定义为final,即public static final void main(String[] args){}。

③ 也可以使用synchronized来修饰main方法,即public static synchronized void main(String[] args){}。

由以上三种形式我们可以看出,main方法只要求保证方法的返回值为void,并且有static关键字修饰,由于main方法为程序入口,因此不能用abstract关键字修饰。同时由于在一个Java文件中可以存在多个类,因此也就可以存在多个main方法,但是只有和文件同名的类的main方法才为入口方法。

【能否在main方法前执行输出“Hello World”】虽然main方法为程序的入口方法,但是仍然可以通过静态代码块实现在main方法之前输出“Hello World”。而且静态代码块无论顺序如何,都会在main方法之前执行。

【Java程序初始化的顺序】既然能在main方法之前完成输出,那么Java程序的初始化顺序到底是怎样的呢?Java程序初始化的原则为:① 静态对象(变量)优先于非静态对象(变量)的初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。② 父类优先于子类进行初始化。③ 按照成员变量定义的顺序进行初始化。即使变量散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化。具体的初始化顺序为:

父类静态变量-->父类静态代码块-->子类静态变量-->子类静态代码块-->父类非静态变量-->父类非静态代码块-->父类构造函数-->子类非静态变量-->子类非静态代码块-->子类构造函数。

猜你喜欢

转载自blog.csdn.net/weixin_36378917/article/details/80667716