淺談Java文件執(zhí)行順序、main程序入口的理解
在我們通過(guò)JVM編譯Java后綴名的文件時(shí),JVM首先尋找入口(main方法)
public static void main(String[] args)
1、由于在入口時(shí),未調(diào)用任何對(duì)象,該方法只能設(shè)置為static靜態(tài)
2、JVM為Java的最底層,所以即使有返回結(jié)果,結(jié)果也無(wú)處可去,因此該方法必然是void無(wú)返回值
3、由于main方法是入口,被JVM自動(dòng)調(diào)用,只有將該方法設(shè)置為public公有級(jí)別才能對(duì)JVM可見(jiàn)
綜上,入口main方法只能寫(xiě)為
public static void main(String[] args)
在我們沒(méi)有寫(xiě)main方法時(shí),系統(tǒng)會(huì)自動(dòng)會(huì)為我們添加一個(gè)無(wú)參mian主方法,該方法的添加位置為public類中首行(之前也提到過(guò),只有添加在public級(jí)別中才對(duì)JVM可見(jiàn),可以自動(dòng)調(diào)用)
注意:如果在java文件中未包含任一公共類(public class),此文件依然可以通過(guò)編譯,但是主動(dòng)運(yùn)行由于找不到public class,就無(wú)法自動(dòng)添加main方法,JVM找不到程序入口,運(yùn)行會(huì)報(bào)錯(cuò),即編譯通過(guò)運(yùn)行報(bào)錯(cuò),缺少public class的文件需要等待被其它java文件調(diào)用,無(wú)法作為入口。
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(); // } //}
報(bào)錯(cuò):
錯(cuò)誤: 找不到或無(wú)法加載主類 j2se.Z
原因: java.lang.ClassNotFoundException: j2se.Z
當(dāng)我們加上public類(public class)后,編譯運(yùn)行通過(guò),根據(jù)返回結(jié)果可以清楚看到程序的執(zhí)行順序,代碼如下:
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(); } }
運(yùn)行結(jié)果:YXYZ
根據(jù)這個(gè)運(yùn)行結(jié)果,我們可以看出,程序運(yùn)行后JVM編譯順序?yàn)?,JVM直奔public class中main()方法作為入口,并開(kāi)始編譯執(zhí)行
public static void main(String[] args)
以上所述是小編給大家介紹的Java文件執(zhí)行順序、main程序入口的詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Java如何實(shí)現(xiàn)海量數(shù)據(jù)判重
在海量數(shù)據(jù)如何確定一個(gè)值是否存在?這是一道非常經(jīng)典的面試場(chǎng)景題,那怎么回答這個(gè)問(wèn)題呢?下面小編就來(lái)和大家詳細(xì)的聊一聊,感興趣的可以一起學(xué)習(xí)一下2023-09-09淺析SpringBoot自動(dòng)裝配的實(shí)現(xiàn)
springboot開(kāi)箱即用,其實(shí)實(shí)現(xiàn)了自動(dòng)裝配,本文重點(diǎn)給大家介紹SpringBoot是如何做到自動(dòng)裝配的,感興趣的朋友跟隨小編一起看看吧2022-02-02java異常處理機(jī)制示例(java拋出異常、捕獲、斷言)
這篇文章主要介紹了java異常處理機(jī)制示例(java拋出異常、捕獲、斷言),需要的朋友可以參考下2014-05-05教你用Java實(shí)現(xiàn)RSA非對(duì)稱加密算法
今天帶各位小伙伴學(xué)習(xí)怎么用Java實(shí)現(xiàn)RSA非對(duì)稱加密算法,文中有非常詳細(xì)的解釋及代碼示例,對(duì)正在學(xué)java算法的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05