第一章、基本概念:Java編譯執行流程

 

 代碼執行流程

編譯器:可以用來檢查一些源碼的錯誤,如語法錯誤,類型錯誤等。但運行時的錯誤需要等到代碼執行時才能發現,編譯階段是無法發現的。

如IDEA、Eclipse等不是編譯器吧,這只是編譯的工具真正實現編譯功能的還是javac命令吧,而javac命令取決於JDK版本,可以通過設置不同的java編譯版本,來編譯當前代碼。

Java虛擬機:是通過運行java命令啓動的。一個main方法將會啓動一個java虛擬機

我們常用的編碼工具如IDEA,其實隱藏了javac和java命令,取而代之的是編譯和運行按鈕。

入口程序

1、要想運行java程序,就必須得有程序入口main。

2、在一個應用程序中只能有一個main方法。

javac編譯後纔會調用java進行執行,執行入口爲main方法。此時會涉及到.class文件的load工作:

  • 如果是當前類,那麼直接通過ClassLoader中的loadClass()方法進行加載。加載的過程是:findLoadedClass()-->parent.loadClass()-->currentLoader.loadClass()。【先從父加載器中加載,再從當前加載器中加載。Launcher.BootstrapClassPath-->Launcher.ExtClassLoader-->Launcher.AppClassLoasder】
  • 當然如果是其它類的加載,可以通過extends ClassLoader並override findClass或者loadClass來指定如何加載該class,一般是將該name當做一個資源路徑URL(注意區別於URI,URI包括所有的URL,但email地址等並非URL)加載並得到Resource對象,從而轉化成Class對象。
  • 如果是其它資源的加載,可以通過ClassLoader中的getResources(String name)加載,getResource會將name作爲一個資源文件路徑,去classPath(包括bootstrapClassPath和當前application下的classPath)中找到所有包含name的資源文件,並返回得到Class對象。

Java編譯器與Java虛擬機

Java虛擬機與編譯器各司其職,讓java運行得更快。編譯運行,而非解釋運行。如果沒有編譯器,那麼java必須一邊解釋純人類語言的代碼,一邊運行。有了編譯器,java可以一邊解釋字節碼(接近機器語言)文件,一邊運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章