浅谈Java文件执行顺序、main程序入口的理解
程序员文章站
2023-12-21 09:26:10
在我们通过jvm编译java后缀名的文件时,jvm首先寻找入口(main方法)
public static void main(string[] args)...
在我们通过jvm编译java后缀名的文件时,jvm首先寻找入口(main方法)
public static void main(string[] args)
1、由于在入口时,未调用任何对象,该方法只能设置为static静态
2、jvm为java的最底层,所以即使有返回结果,结果也无处可去,因此该方法必然是void无返回值
3、由于main方法是入口,被jvm自动调用,只有将该方法设置为public公有级别才能对jvm可见
综上,入口main方法只能写为
public static void main(string[] args)
在我们没有写main方法时,系统会自动会为我们添加一个无参mian主方法,该方法的添加位置为public类中首行(之前也提到过,只有添加在public级别中才对jvm可见,可以自动调用)
注意:如果在java文件中未包含任一公共类(public class),此文件依然可以通过编译,但是主动运行由于找不到public class,就无法自动添加main方法,jvm找不到程序入口,运行会报错,即编译通过运行报错,缺少public class的文件需要等待被其它java文件调用,无法作为入口。
package j2se; class x{ y y=new y(); public x(){ system.out.print("x"); } } class y{ public y(){ system.out.print("y"); } } //public class z extends x{ // y y=new y(); // public z(){ // system.out.print("z"); // } // public static void main(string[] args) { // new z(); // } //}
报错:
错误: 找不到或无法加载主类 j2se.z
原因: java.lang.classnotfoundexception: j2se.z
当我们加上public类(public class)后,编译运行通过,根据返回结果可以清楚看到程序的执行顺序,代码如下:
package j2se; class x{ y y=new y(); public x(){ system.out.print("x"); } } class y{ public y(){ system.out.print("y"); } } public class z extends x{ y y=new y(); public z(){ system.out.print("z"); } public static void main(string[] args) { new z(); } }
运行结果:yxyz
根据这个运行结果,我们可以看出,程序运行后jvm编译顺序为,jvm直奔public class中main()方法作为入口,并开始编译执行
public static void main(string[] args)
以上所述是小编给大家介绍的java文件执行顺序、main程序入口的详解整合,希望对大家有所帮助