Java程序的運行包括兩個非常重要的階段:
一.編譯階段
注意:Java程序員直接編寫的Java代碼(普通文本)是無法被JVM直接識別的,必須通過編譯將“普通文本代碼”變為“字節碼“
第一步:程序員需要在計算機硬盤中任意位置創建一個.java擴展名的文件,該文件被稱為 java源文件,源文件當中編寫的是java源代碼/源程序。java源代碼必須符合java的語法規則。
第二步:java程序員需要使用JDK當中自帶的javac.exe命令進行java程序的編譯。
Javac使用規則?
javac java源文件的路徑
javac在哪用?
在DOS命令窗口中使用,win+r打開“運行窗口”,輸入cmd
–注:
一個java源文件可以編譯生成多個.class文件
編譯階段主要檢查java源代碼是否符合Java語法。
符合java語法則能生成以.class結尾的字節碼文件,
不符合java語法則無法形成字節碼文件。
字節碼文件不是純粹的二進制,無法在操作系統中直接執行。
編譯結束之后,可以將class文件拷貝到其他操作系統當中(java跨平臺性)。
字節碼文件/class文件是最終要執行的文件,所以說class文件生成之后,java源文件/.java文件刪除并不會影響程序執行。但是一般不刪除,最后可能執行效果不是想要的,只能將java源文件重新修改,然后java源文件重新生成class文件,運行class文件生成新的效果。


二.運行階段
JDK安裝之后,除了自帶javac.exe之外,還有另一個工具/命令,叫java.exe,java.exe主要負責運行階段。
java.exe在哪里用?
在DOS窗口中使用,win+r打開“運行窗口”,輸入cmd
java.exe怎么用?
java 類名 注意與javac命令的區分
例如:硬盤上有一個A.class文件,則:java A
硬盤上有一個b.class文件,則:java b
注意不能寫成:java A.class(錯誤方式)
運行階段過程步驟:
1.打開DOS命令窗口
2.輸入:java A
3.java.exe命令會啟動Java虛擬機(JVM),JVM會啟動類加載器ClassLoader。
4.ClassLoader會去硬盤上搜索A.Class文件,找到該文件則將該文件字節碼文件裝載到JVM當中。
5.JVM將A.Class字節碼文件解釋成二進制10101010這樣的數據。
6.然后操作系統執行二進制和底層硬件平臺進行交互。


編譯階段和運行階段可以在不同的操作系統上完成,因為Java具有跨平臺性
Java源代碼編譯后可以刪除源代碼,只留下字節碼,因為源代碼不參與程序的執行過程
參與執行過程的是字節碼,但是最好不要刪除源代碼
放源代碼的文件擴展名必須是xxx.java
編譯生成的字節碼文件擴展名是xxx.class
注意:一個Java源文件是可以編譯生成多個class文件的,最終運行的是class文件
字節碼文件不是二進制文件,如果是二進制,就不需要JVM,因為操作系統可以直接執行二進制文件
Java程序從開發到最終運行經歷的過程:
編譯器:(可以在Windows上)
第一步:在硬盤中新建xxx.java文件
第二步:使用文本編輯器打開xxx.java文件
第三步:在xxx.java文件中編寫“符合Java語法規則”的源代碼
第四步:保存
第五步:使用編譯器(javac【JDK安裝后自帶】)對xxx.java文件進行編譯
第六步:如果xxx.java文件是符合語法規則的,編譯會通過;如果xxx.java文件中編寫的源代碼違背了語法規則,那么編譯器會報錯,編譯器報錯后class文件不會生成,只有編譯通過了才會生成class字節碼文件,并且一個Java源文件是可以生成多個class文件的。(編譯實質上是檢查語法)
運行期:(可以在widows上,也可以在其他的OS上)
第七步:如果是在Linux上運行需要將Windows上生成的class文件拷貝過去,不需要拷貝源代碼,真正在Linux運行的是字節碼。(但是不要刪除源代碼)
第八步:使用JDK自帶的一個命令/工具:Java(負責運行的命令/工具)執行字節碼
第九步:JVM會將字節碼文件裝載進去,然后JVM對字節碼進行解釋(解釋器會將字節碼解釋為二進制)
第十步:JVM會將生成的二進制碼交給OS,操作系統就會執行二進制碼和硬件進行交互
注:在以上過程中,有兩個重要命令:
javac命令,負責編譯
java命令,負責運行
xxx.java源文件經過編譯之后生成了A.class、B.class、C.class等文件
其中稱A是一個類,B是一個類,C是一個類;A,B,C是類的名字
以上過程中,程序員的工作:
新建Java文件
打開Java文件
寫Java源代碼
保存
javac命令編譯
java命令運行
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。