1. 程式人生 > 其它 >Java漫談3

Java漫談3

上次我們說道Java中的Hello World(以下簡稱HW)是什麼樣子的,還寫了一段HW的輸出程式。不知道你是否會有疑問,難道在Java的環境中只要輸入這一句話就能輸出HW麼。那如果初始的程式如此地簡單,第一章的時候又為什麼非要談什麼繼承、封裝、多型,只接談這個程式不就能更加自然而然地切入麼。

對,你猜對了。

事實上,即便你在命令列裡面輸入HW的程式碼,在windows下,命令列會提示說這不是內外部命令。而在IDE中點選執行倒是能直接看到結果,不過這是因為IDE已經引導我們把一些事情做好了。IDE也就是專門用來編譯Java程式碼的一款軟體中,你可以把它想象成Java程式的製作車間。

目前開發Java程式還是IDE用的比較多,所以在漫談中預設的就是在IDE中開發的情況。

那這個所謂的Java車間在執行HW那句程式碼之前都有哪些動作呢。一般我進入IDE之後的順序是如下:

  1. 新建一個工程
  2. 在工程中新建類
  3. 在類中新增main方法
  4. 在main方法中新增HW語句

新建一個工程這個你肯定能理解,在 Java漫談1的時候說Java中的類就好比是一個模版,不知道你會不會萌生出一個疑問,為什麼要直接新建一個“模版”,難道就不能建一個“方法”麼?如果你是剛剛進入Java這個領域的,我的回答是——不能,原因是——沒有原因,你要做的是把HW程式的功能自己實踐出來,爾後在這個程式之上改動1-2個字元,這麼一步步地慢慢探索下去,相較於把不懂的點搞懂,把程式實現更重要。如果你已經在這一行浸營已久,我的回答是,Java就是這麼規定的,到目前為止並沒有看到說人話的解釋。如果非要解釋的話,可能就是在Java中萬物皆物件,類是物件的一種形式。類即模版,如此一來每一個寫的類都可以成為另一個模版的一部分,有點兒像樂高積木,便於構件複雜的體系。

現在類有了,不過要在類中寫方法。就拿人這個屬性來說,你有各種屬性,姓名,性別,身高等。如果我們沒有方法的話,頂多算是一具蠟像,而就不能和別的人進行聊天,吹牛,說hello等動作。不過這其中有個最重要的方法就是main方法,它是一個程式的執行方法的初始放方法。也就是說,當一臺計算機要執行一個程式的時候,它不是從程式的第一行開始執行的,而是會先找到這個程式的main()方法,從main方法的第一行開始執行指令。

寫到這兒的時候,我腦子裡突然冒出一個好玩兒的想法,如果把段譽比武的的過程用面向物件的Java語言來描述的話會是個什麼樣子呢。下面我就嘗試一下,希望金庸老爺子不要打我…

首先,我會new一個工程,這個工程的名字叫做“武林大會”。然後,我會在這個工程裡面新建一個俠客類,用來指代所有參加武林大會的人的一般屬性和方法,也就是模版。這些屬性有姓名,年齡,武功,等級,角色。通用的方法是出招,比武。再接著,我會new好幾個俠客例項,反映在程式碼上的操作就是new不同的俠客例項,且這些例項都繼承自俠客類。由於是繼承了俠客類,所以這些例項也就天生擁有了俠客類的屬性和方法,於是下一步就是根據不同的角色給這些屬性和方法賦予不同的值。就拿段譽和慕容復來說,大概會向下面這個樣子:

姓名

段譽

慕容復

年齡

26

28

性別

武功

凌波微步

斗轉星移

等級

一流

一流巔峰

角色

參賽選手

參賽選手

而段譽的出招()是返回凌波微步以及凌波微步的傷害值,這裡是90。慕容復的出招()則是返回鬥轉星系以及鬥轉的傷害值100。之所以要有返回值,是因為比武這個動作抽象來看,就是比較雙方出招之後的傷害值的大小,這裡先不考慮生命值和傷害值的複合關係,僅僅是誰的傷害值大,誰就贏了。

此外,由於每個例項之所以與別的例項不同,是因為有自己特殊的屬性或者方法,在這裡,我覺得慕容復還有一個追殺()方法,而相應的段譽有一個逃跑()方法。因為在《天龍八部》的前期,段譽見著慕容復還是要跑的。

最後我們再新建一個類,叫做比武類。為了方便邏輯理解,我們就把main函式放在這個類裡面,也就是說程式一啟動之後就讓他們比武。下面就構造比武的函式就行了。構造這個方法之前,我們需要現將這個比武的過程抽象一下,可以抽象成:找一個對手,相互“出招”,如果我的傷害值不敵對方我就輸了,如果比對方強我就勝利,所以大概的方法的樣子如下:

比武(俠者1,俠者2){ int 結果 = 俠者1.出招() - 俠者2.出招();//俠者1.出招 VS 俠者2.出招 if(結果>0){ return 俠者1贏了; }else{ return 俠者2贏了;

而main函式裡面的執行語句也就是比較清楚了,首先呼叫

比武()方法,發現慕容復贏了,則慕容復會呼叫追殺(),而段譽一旦發現慕容復呼叫追殺(),他就呼叫逃跑()順利逃脫,為迎娶王語嫣成功地保住了小命。

這篇文章主要分享了我對Java裡面類的例項化的理解,在段譽比武的例子中又稍微談到了一點兒抽象的的概念,希望這能對你理解Java類的例項話有些幫助,我們下回見。