本文小結
1 完成第一個JAVA 程序
2 對第一個程序細節(jié)了解
3 JAVA 程序執(zhí)行的過程了解
前情回顧
小輝輝和博仔幾個已經(jīng)完成了JAVA環(huán)境的安裝。也完成了測試。萬事俱備只欠東風练湿。
周鵬程:確實萬事俱備只欠東風。都劃水好幾集了审轮,說什么也該我出場了吧肥哎。今天說什么都要好好整理以下。畢竟預習不易疾渣,且行且凡爾賽篡诽。
叮咚,叮咚稳衬。
小舒:周鵬程霞捡,預習完了吧,敲出第一個代碼了嘛薄疚,怎么做啊碧信,我有點沒弄清楚。
周鵬程:hahaha 機會來了街夭。"第一個代碼啊砰碴,很簡單啊,來來來我告訴你板丽,先不管三七二十一 呈枉,直接干出一段代碼來"
class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
小舒:代碼是出來了,要怎么運行咧埃碱,運行出來又是個啥咧猖辫?
周鵬程:這個簡單。上圖??
1 在桌面建立一個tex的文件夾砚殿。
小舒:我后面怎么沒有.txt的后綴翱性鳌?
周鵬程:這個是為了防止用戶不小心修改了這個后綴造成文件損壞而故意設計的似炎。我們可以這樣去打開辛萍。
打開后綴名
打開任意盤符悯姊。選中查看。這里就想到與選擇了其中一個文件對查看這個屬性進行修改贩毕。只要選擇勾選上文件拓展名即可讓后綴名顯示了悯许。
image.png
小舒:好的,我的打開了辉阶。接下來是個什么操作先壕。
周鵬程:照著把剛剛那段東西打上去即可。如圖??
小舒:這也簡單睛藻。接下來咧启上,不用停下來。
周鵬程:那我可要開始咯店印。
右鍵重命名。
接著無視即可倒慧。
進入cmd
小舒:等一下按摘,等一下,為啥進入cmd?
周鵬程:cmd 可以調用命令啦纫谅,你可別忘記了JAVA的運行是需要經(jīng)過兩個步驟的炫贤。我們這里得到的是.java的文件。還需要把他們變成.class文件付秕,.exe文件咧兰珍。
小舒:哦這樣啊,你繼續(xù)询吴,
周鵬程:如下操作即可??
這里已經(jīng)到達了當前的.java位置掠河。可以使用javac把.java文件編譯成.class文件猛计。因為上節(jié)已經(jīng)講到了唠摹,我們把環(huán)境變量進行了配置。
執(zhí)行javac命令奉瘤,如果當前文件沒有勾拉,就會去環(huán)境變量去找對應的位置。因為已經(jīng)完成了配置盗温,所以這里可以進入bin中找到javac這條命令藕赞。
小舒:哦,上節(jié)課原來是這個原理啊卖局。懂了斧蜕,懂了。
然后執(zhí)行如下即可吼驶。
javac HelloWorld.java 意思是javac(編譯)HelloWorld.java(名字是HelloWorld.java的文件)
ps:這里可以用Tab鍵進行補充惩激,還不錯哦店煞。真的超強。
最后一步:java HelloWorld 即可风钻。
小舒:好的顷蟀,我的第一個程序也跑起來了。但是我不知道為啥骡技∶觯可以幫我解釋一下這個程序吧。
周鵬程:ok布朦,那我一句一句給你解釋吧囤萤。
1 class HelloWorld{
2 public static void main(String[] args){
3 System.out.println("hello world");
4 }
5 }
不知道你發(fā)現(xiàn)了沒,這個代碼是非常對稱的是趴√紊幔可以簡化一下。
class HelloWorld{
}
這是最大的一個整體唆途。里面包含了如下
public static void main(String[] args){
}
在這個里面又包含了
System.out.println("hello world");
小舒:哎呀富雅,好像確實是這樣的咧。有點意思哦肛搬。
周鵬程:okok,那我直接開始講了哦没佑。由這個可以得出,{}可以作為一個整體温赔。里面可以包含東西蛤奢,這個稱之為代碼塊。
class 是JAVA的關鍵字陶贼,表示接下來的一部分是類啤贩。{}里面全部是類的內容。
其中緊跟著的是類名骇窍。這就很好理解了瓜晤。
class HelloWorld{} 有一個名字叫HelloWorld的類。這里懂了吧腹纳。
小舒:這里懂了痢掠,對了,我發(fā)現(xiàn)這個文件名字好像也是這個嘲恍,這個是巧合還是可以隨便亂寫足画?
周鵬程:這就很有覺悟咯。這是因為java的源文件命名規(guī)則佃牛。
java源文件的命名規(guī)則是這樣的:如果源文件中有多個類淹辞,那么只能有一個類是public類;如有有一個類是public類俘侠,那么源文件的名字必須與這個類的名字完全相同象缀,擴展名是.java蔬将;如果源文件沒有public類,那么源文件只要和某個類的名字相同央星,并且擴展名是.java就可以了霞怀。
知道我為啥沒有加public了吧。
小舒:確定不是忘記了莉给?
周鵬程:算了那不重要毙石。我們來做以下實驗。
實驗1 :驗證文件名字和類名是否需要統(tǒng)一颓遏。(這里先不加public)
對照組1_1:編寫類為HelloWorld徐矩,文件名字為HelloWorld的文件,看是否會報錯叁幢。
對照組2_1: 編寫類為HelloWorld滤灯,文件名字為HelloWorlds的文件,看是否會報錯曼玩。
對照組1_1 :
對照實驗1_2.
編譯未出錯;
運行的時候出錯誤力喷。
實驗一小結
對照組1 沒用使用public,文件名字和類名一致演训。所以編譯成功,運行成功贝咙。
對照組2 沒有使用public,文件名字和類名不一致样悟。編譯成功,運行失敗庭猩,原因是沒有找到主類窟她。
小舒:所以那個報錯的原因是什么?
周鵬程:這個啊蔼水,因為main是程序的入口震糖,系統(tǒng)根據(jù)文件名去找對應的類,因為我們對照組2讓文件名和類名不一致了趴腋。所以這里是不存在和文件名同名的類且包含main方法的吊说。對了,main是程序的入口优炬。所以這個一定是不能變的颁井。
小舒:這里的public 是什么意思,會對后面的執(zhí)行有影響嘛蠢护。
周鵬程:有的雅宾,我們來看第二個實驗。
對照組2_1:文件名 HelloWorld 類名HelloWorld 加public
image.png
對照組2_2:文件名字 HelloWorld 類名 HelloWorlds 加public
image.png
小舒:哇葵硕,居然這么神奇啊眉抬」嵯牛看來這個public 還是很有用的嘛。這么說蜀变,一個文件里面是可以有多個類存在的是吧悄谐?
周鵬程:是的,來看下一個實驗昏苏。
對照組3_1:當類名和文件名相同的時候尊沸。
多個類同一個源文件中
出現(xiàn)了兩個.class 文件。說明這個在編譯的時候是有幾個類就完成幾個類的編譯贤惯。
javac之后.png
ok了洼专,差不多了,可以把上述進行一個完整的小結了孵构。
說白了屁商,就是源文件的命名規(guī)則。記住以下幾點即可颈墅。
1 如果源文件中有多個類蜡镶,只能有一個類被public修飾。出現(xiàn)的錯誤為實驗2_2恤筛。
被public 修飾的類必須放在同名文件夾中官还。就這就好了,你只有一個文件毒坛,就不要想放兩個public 修飾的東西望伦。
2 main方法是函數(shù)的入口。且不要對上面的東西做什么修改煎殷。至于原因屯伞,稍后馬上呈上。
3 其實把我建議一個文件夾下面就寫一個類豪直,他不香嘛劣摇?
對了,這個是第一個文件出現(xiàn)的一些問題小結弓乙。
一個程序的執(zhí)行到底經(jīng)歷了啥
想要了解一個程序的執(zhí)行過程末融,我們需要去了解我們上節(jié)課的老朋友,JDK唆貌。
JDK 是由JRE和編譯器等相關工具滑潘。
JRE由核心內庫和JVM組成。
JVM 是java虛擬機锨咙,就是他把編譯完成的字節(jié)碼文件變成了可以執(zhí)行的文件语卤。java程序是跑在這個上面的。
image.png
所以簡單點來說就是,我們寫好了一個程序粹舵,調用javac命令會把JDK中的編譯器觸發(fā)完成.java到.class的編譯钮孵。然后java 文件名完成.class文件的運行。這個是由JVM完成的眼滤。所以想要刨祖墳就是要了解JVM巴席,不過我勸你簡單了解一下就好了,耗子尾汁诅需。
再拉回main函數(shù)漾唉。
JVM規(guī)定main函數(shù)作為程序的入口。并做了如下規(guī)定堰塌。
public static void main(String[] args){}
為啥這樣規(guī)定咧赵刑?
由于JVM在運行這個Java應用程序的時候,首先會調用main方法场刑,調用時不實例化這個類的對象般此,而是通過類名直接調用因此需要是限制為public static。目前就此打住吧牵现,后面聊到JVM的時候再進一步铐懊。不然我怕你放棄學習了。
小結
1 Hello world 的程序編寫瞎疼。
2 Hello World 程序常見錯誤科乎。
3 main函數(shù)相關問題。