前言
C: 在上一篇继榆,我們搭建好了 Java 語言的開發(fā)環(huán)境巾表,這一篇查老師就帶著大家愉快的寫出我們的第一個程序,不過本篇我們是使用記事本(比較原生態(tài))來寫程序略吨,并不使用其他的高級開發(fā)工具集币,所以可能會顯得比較低端,請大家見諒翠忠。
飯要一口一口的吃鞠苟,工具也要一點一點的升級,技術(shù)也要一點一滴的積累。
系列閱讀
查老師有話說: 雖然查老師心中你是最棒的当娱,但是如果你上一篇沒看吃既,還是建議打開快速串一下,以防止對下方的內(nèi)容無法保持連貫性跨细。
開發(fā)步驟
一個Java程序的開發(fā)鹦倚,需要經(jīng)過:編寫源碼,編譯源碼和運(yùn)行冀惭,這三大階段震叙。
和查老師來體驗一下吧!源代碼/源程序:程序的原始指令散休,由程序員編寫 媒楼。
1.首先使用記事本編寫源代碼文件( Java 程序的源代碼文件擴(kuò)展名為 .java
)。
2.打開cmd命令窗口戚丸,進(jìn)入源代碼所在地划址,使用 javac
命令編譯,生成 .class
文件限府。
查老師有話說: 編寫完的源代碼夺颤,計算機(jī)是無法直接執(zhí)行的,因為它只識別二進(jìn)制谣殊,所以我們需要一個
翻譯官
幫助我們?nèi)シg下拂共,這樣計算機(jī)才能夠識別。翻譯官
就是編譯器姻几,編譯之后就會出現(xiàn)一個擴(kuò)展名為.class
的字節(jié)碼文件(它并非純二進(jìn)制文件宜狐,是運(yùn)行于JVM中的一種偽二進(jìn)制文件),這時才能夠被計算機(jī)執(zhí)行蛇捌。
3.使用 java
命令運(yùn)行 .class
文件抚恒。
運(yùn)行
.class
文件時不能加上.class
后綴名。
這樣我們就實現(xiàn)了第一個 Java 程序络拌,我們借助它給計算機(jī)下達(dá)了一個在控制臺輸出 Hello World!!!
的指令俭驮。
查老師有話說: 為什么我們開始編寫的第一個程序要輸出 Hello World 這句話?
實際是因為《The C Programming Language》這本 C 語言書籍中使用它做了第一個演示程序春贸,非常著名顾画,所以后來的程序員在學(xué)習(xí)編程或進(jìn)行設(shè)備調(diào)試時延續(xù)了這一習(xí)慣击困。
一個程序員才懂的冷笑話:一位資深程序員到了退休的年紀(jì),為了給自己的晚年生活增加點樂趣,開始學(xué)習(xí)書法扯俱,在開始學(xué)習(xí)書法的第一天食棕,資深程序員鋪開紙張暖庄,大筆一揮
Hello World
问芬!
基本程序結(jié)構(gòu)
剛才我們編寫了第一個 Java 程序翼岁,盡管背了相關(guān)單詞,但肯定還是看的云里霧里的司光。查老師先給你個提醒琅坡,現(xiàn)在呢不要求你過多理解它們的含義,只需要知道它的效果和注意事項即可残家。隨著學(xué)習(xí)的深入榆俺,慢慢就會深入認(rèn)識和理解了,千萬別鉆牛角尖 坞淮,因為還沒給你講的肯定是因為查老師認(rèn)為目前還不是太適合你的谴仙,欲速則不達(dá) 。
下方是你現(xiàn)在需要記憶的注意事項和規(guī)范:
類名與文件名完全一致碾盐,首字母大寫(帕斯卡/大駝峰命名法)。
main() 方法是程序的入口揩局,四要素必不可少毫玖。
核心語句:System.out.println(); 從控制臺輸出信息,S是大寫凌盯。( Java 嚴(yán)格區(qū)分大小寫)
{ 和 }一 一對應(yīng)付枫,缺一不可。(注意模仿查老師的編寫習(xí)慣)
注意要有層級縮進(jìn)驰怎,一行只寫一條語句即可阐滩。
查老師有話說:“好的代碼應(yīng)該是給人看的,而不是給機(jī)器看的县忌〉嗬疲” 上面的5條注意事項,其實4條都在強(qiáng)調(diào)規(guī)范症杏,編碼規(guī)范非常重要装获!
一個軟件的生命周期中,80%的花費都在于維護(hù)厉颤。幾乎沒有任何一個軟件穴豫,在其整個生命周期中,均由最初的開發(fā)人員來維護(hù)逼友。編碼規(guī)范可以改善軟件的可讀性精肃,可以讓程序員盡快而徹底地理解新的代碼。更多規(guī)范除了模仿查老師文章示例習(xí)慣外帜乞,還請后續(xù)隨時與查老師一起解讀《阿里巴巴Java開發(fā)手冊》司抱。
輸出語句
其實輸出功能,不僅僅只有 println()
這一個語法挖函,還有去掉了 ln
之后的 print()
也可以實現(xiàn)状植。
System.out.print(); // 輸出完不換行
System.out.println(); // 輸出完換行
如果想讓 print()
實現(xiàn) println()
的效果浊竟,可以借助轉(zhuǎn)義符。
轉(zhuǎn)義符 | 說明 |
---|---|
\n | 將光標(biāo)移動到下一行的第一格 |
\t | 將光標(biāo)移動到下一個水平制表位置 |
// 下方前兩行和第三行代碼是等效的津畸。
System.out.println("Hello");
System.out.println("World");
System.out.print("Hello \n World\n");
注釋
在 Java 的編寫過程中我們需要對一些程序進(jìn)行注釋振定,這樣除了自己更方便閱讀,別人也更好理解我們的程序肉拓,所以我們一定要適時的加一些注釋后频,可以是編程思路或者是程序的作用。
Java 中有三種注釋:
- 單行注釋以
//
開始暖途; - 多行注釋以
/*
開頭卑惜,以*/
結(jié)尾; - JavaDoc(文檔注釋)注釋以
/**
開頭驻售,以*/
結(jié)尾(文檔注釋前期了解露久,后期再掌握)
/**
* HelloWorld.java
* 第一個Java程序
*/
public class HelloWorld{
public static void main(String[ ] args){
// 輸出消息到控制臺(單行注釋后注意添加一個空格,這是一個小規(guī)范)
System.out.println("Hello World!!!");
}
}
跨平臺原理
在《Java語法 | Java概述》中欺栗,查老師講 Java 的能力時就埋了一個伏筆毫痕,Java 程序是跨平臺的,何謂跨平臺迟几?查老師給你舉個非跨平臺的程序例子消请,下圖是百度網(wǎng)盤客戶端程序的下載頁面,它為了能夠運(yùn)行在不同的平臺(系統(tǒng))上类腮,開發(fā)了6套系統(tǒng)(其實是7套臊泰,還有一套網(wǎng)頁版)⊙潦啵看到這其實你就應(yīng)該能明白為什么跨平臺是一個非常優(yōu)秀的能力了缸逃。
而經(jīng)過剛才編寫完第一個 Java 程序之后,我們思考一下 Java 為什么能跨平臺厂抽?其實在開發(fā)步驟中就能找到原因察滑。編譯!編譯會將源代碼轉(zhuǎn)變?yōu)樽止?jié)碼文件(偽二進(jìn)制)修肠,而這偽二進(jìn)制內(nèi)容未來運(yùn)行時是運(yùn)行在 JVM(Java Virtual Machine)上的贺辰,換而言之,其是因為 JVM 能跨平臺安裝嵌施,所以 Java 才能實現(xiàn)跨平臺 饲化。
由此,Java 程序員就可以不用考慮所寫的程序要在哪里運(yùn)行了吗伤,反正都是在 JVM 虛擬機(jī)上運(yùn)行的吃靠,JVM 會負(fù)責(zé)將其變成相應(yīng)平臺的機(jī)器語言,而這個轉(zhuǎn)變并不是程序員應(yīng)該關(guān)心的足淆。后續(xù)的很多優(yōu)秀程序設(shè)計都采用了該思想巢块。
Java虛擬機(jī)有自己完善的硬件架構(gòu)礁阁,如處理器、堆棧等族奢,還具有相應(yīng)的指令系統(tǒng)姥闭。
Java虛擬機(jī)本質(zhì)上就是一個程序,當(dāng)它在命令行上啟動的時候越走,就開始執(zhí)行保存在某字節(jié)碼文件中的指令棚品。Java語言的可移植性正是建立在Java虛擬機(jī)的基礎(chǔ)上。任何平臺只要裝有針對于該平臺的Java虛擬機(jī)廊敌,字節(jié)碼文件(.class)就可以在該平臺上運(yùn)行铜跑。這就是“一次編譯,多次運(yùn)行”骡澈。
Java虛擬機(jī)不僅是一種跨平臺的軟件锅纺,而且是一種新的網(wǎng)絡(luò)計算平臺。該平臺包括許多相關(guān)的技術(shù)肋殴,如符合開放接口標(biāo)準(zhǔn)的各種API伞广、優(yōu)化技術(shù)等。Java技術(shù)使同一種應(yīng)用可以運(yùn)行在不同的平臺上疼电。Java平臺可分為兩部分,即Java虛擬機(jī)(Java virtual machine减拭,JVM)和Java API類庫蔽豺。[1]
目前先了解到這種程度即可,JVM 深入學(xué)習(xí)是未來提升 "Java 內(nèi)功" 的重要一步拧粪,但它不太適合剛學(xué)習(xí)的你修陡。
編譯和反編譯
從剛才的學(xué)習(xí)中,我們清楚了編譯是將源代碼文件轉(zhuǎn)換為了字節(jié)碼文件可霎,這字節(jié)碼文件也是以后我們運(yùn)行所需的魄鸦。如果有一天,你的老板給你了一堆字節(jié)碼文件癣朗,讓你去借鑒一下內(nèi)容(源代碼)拾因,你當(dāng)然知道字節(jié)碼文件里是一堆亂碼了,所以隨著而來的旷余,我們需要它再轉(zhuǎn)換為源代碼文件绢记,這就是反編譯,我們可以借助工具來更快正卧,更好的批量處理蠢熄。
編譯: 將源文件(.java)轉(zhuǎn)換成字節(jié)碼文件(.class)的過程稱為編譯。
反編譯: 將字節(jié)碼文件(.class)轉(zhuǎn)換回源文件(.java)的過程稱為反編譯炉旷。(常用有Jad签孔、FrontEnd叉讥、jd-gui)
此處僅僅演示利用 Jad
來將 HelloWorld.class 進(jìn)行反編譯,類似的工具還有 jd-gui 等饥追。
參考文獻(xiàn)
[1]顧瑋. Java虛擬機(jī)的分析與研究[J]. 辦公自動化,2017,22(9):35-36,11
后記
好了图仓,第一個 Java 程序的介紹也就到這兒結(jié)束了,本篇的作業(yè)請微信搜索關(guān)注: 查老師的講義 判耕,然后回復(fù) 第一個Java程序作業(yè) 即可透绩。
今天這篇感覺怎么樣?概念是否清楚了壁熄?語法是否記住了帚豪?萬事開頭難,加油啊同學(xué)草丧!
查老師有話說: 對于技術(shù)的學(xué)習(xí)狸臣,查老師一貫遵循的步驟是:先用最最簡單的 demo 讓它跑起來,然后學(xué)學(xué)它的最最常用 API 和 配置讓自己能用起來昌执,最后熟練使用的基礎(chǔ)上烛亦,在空閑時嘗試閱讀它的源碼讓自己能夠洞徹它的運(yùn)行機(jī)制,部分問題出現(xiàn)的原因懂拾,同時借鑒這些技術(shù)實現(xiàn)來提升自己的代碼高度煤禽。
所以在查老師的文章中,前期基本都是小白文岖赋,僅僅穿插很少量的源碼研究檬果。當(dāng)然等小白文更新多了,你們還依然喜歡唐断,后期會不定時專門對部分技術(shù)的源碼進(jìn)行解析选脊。