前段時間在抽工作之空余,更加系統和深入的重新學習Java的一些技術知識。
最近也試著申請了一個專欄,對前段時間的一些收獲和知識點做一個系統性的歸納回顧和總結。
昨天也是剛剛寫完了關于Java中的各種基礎語言要素的總結,總覺得少了點什么。
對基礎語言要素的理解和使用,實際上是很重要的。
俗話說,一切偉大的行動和思想,都源于一個微不足道的開始。
而對于一門語言來說,熟練的掌握對其基礎語言要素的理解和使用,就是這個“微不足道的開始”
可以這樣說,一門語言的基礎語言要素,就等同于是一門武功的內功。
將自己的“內功”練到爐火純青,剩下的,就只是招式(外功)而已了。
我在網上看到別人這樣解釋內功與外功的區別,覺得用于表達我想說的話,十分契合:
內功就像子彈,外功就像槍。
每個人都會有子彈和槍,但問題是多少和優劣。
內功越強,子彈越多;外功越強,槍就越好。
其兩者之間的關系就是,內功是基礎,決定外功建筑。
對應于Java當中來說則是:
基礎語言要素是根基;而我們所做的所謂的“編程”工作,實際就是通過根基創造使用招式而已。
回想最初學習Java時,一直沒能對這些基礎語言要素有足夠的重視,
也沒能對其有一個很系統性的分類歸納的理解,導致總覺得思路有點雜亂。
時常在想,怎么樣可以對這些語言要素的概念和使用方式,有一個更形象的理解。
后來在漸漸深入的過程中,發現:
“編程”工作與我們在學生時代都經歷的“作文”工作實際上是很相似的。
舉例來說:
~~~
請以《站在……的門口》為題寫一篇文章。
要求:1.立意自定。
2.文體不限。可以記敘經歷,抒發感情,發表議論,展開想象,等等。
3.不少于800字
~~~
這是什么?這是一個作文題目。
而:
~~~
有一個100萬長度的數組,其中有兩個數是重復的,
請使用Java語言寫一個最快的算法,查找到重復的數。
~~~
這又是什么?這是一道程序題目。
所以我們不難發現,所謂的“作文題目”與“程序題目”。
歸納來講:實際上也就是一種“實現需求”罷了。
對于二種不同的需求,我們所做的工作實際上都是“編寫文章”!不同的是,
- 對于“作文題目”,我們使用的語言是:中文;對于“程序題目”,我們使用的語言是:Java;
- 對于用中文書寫的文章,我們通常稱為“一篇作文”;對于用Java語言書寫的文章,我們通常稱為“一個Java類”。
一篇作文的構成可能通常包括:
- 標題:用于對整篇作文所講的內容做一個最精短的概括。例如每個人小時候可能都用過的作文題目《我的父親》,目的就是讓閱讀的人看見就題目就知道這篇作文是描寫關于你父親的事跡的。
- 人、物、地點:一篇文章自然會涉及到相關的人,物和事情發生的地點。例如《我的父親》一文里,通常都有一個經典情節:記得小時候,夜里發高燒下著大雨,也打不到車了。父親毅然決然的冒著大雨背著我跑到了醫院..云云。那么這里涉及到的人就是:“我”和“父親”;涉及到的物可能包括:雨傘,雨衣等;涉及到的地點可能包括:“家”,醫院等.
- 故事情節(段落):故事情節可能是一篇作文所占比重最大的部分。而同樣以《我的父親》為言,通常我們會根據多個事例來表現父親對自己的好,而每個事例就會分別對應于一個故事情節。而我們就會通過分段來分別描述這些故事情節,而故事情節里涉及到的就是所謂的“人、物、地點”。
同理的,一個Java類的構成通常包括:
- 類的聲明:Java類的類名與作文的“標題”作用實際是一樣的。就是用于描述你封裝的該類提供的功能。
- 變量/常量:變量與常量實際上就是作文中的“人,物和地點”。
- 方法(函數):方法用于描述我們要提供的程序功能,就如同段落用于描述故事情節一樣。而段落涉及“人、物、地點”,方法里使用定義的變量/常量。
我們將上面舉例說到的《我的父親》轉換為一個Java類的體現形式,可能能讓我們更形象的進行理解:
~~~
/*
* 作文《我的父親》用Java類體現
*/
public class MyDad /* 類聲明::作文標題 */{
// 變量(常量)用于記錄作文中的人、物、地點
// 人物:
private static final String ME = "我";
private static final String MY_DAD = "我的父親";
// 物:
private static final String RAINCOAT = "雨衣";
// 地點:
private static final String MY_HOME = "我家";
private static final String HOSPITAL = "醫院";
//函數 ::段落
private static void see_a_patient(){
StringBuilder sb = new StringBuilder();
sb.append("記得小時候,有一次");
sb.append(ME);//使用變量
sb.append("發高燒!窗外下著大雨,也打不到車。萬分緊急之下,");
sb.append(MY_DAD);
sb.append("趕緊拿出一件");
sb.append(RAINCOAT);
sb.append("為我披上,背上我,冒著大雨把我從");
sb.append(MY_HOME);
sb.append("送到了");
sb.append(HOSPITAL);
System.out.println(sb.toString());
}
public static void main(String[] args) {
see_a_patient();
}
}
~~~
該程序運行的輸出信息為:
記得小時候,有一次我發高燒!窗外下著大雨,也打不到車。萬分緊急之下,我的父親趕緊拿出一件雨衣為我披上,背上我,冒著大雨把我從我家送到了醫院
請看了,我們不正是用Java語言寫了一篇“作文”嗎?
到此,我們通過以熟悉的“作文”為切入點,了解了一個Java類的構成結構。
由此我們知道了:一個Java類的構成實際并不復雜,它的結構通常就是類聲明、變量(常量)以及方法(函數)。
而所謂的一個“復雜的類”就如同“一篇幾萬字的文章”的原理一樣,無非就是:
1、涉及到的人、物更多 = 定義的變量\常量更多
2、段落更多/描述的故事情節更多 = 定義的方法(函數更多)
而對應的,以長篇小說為例。如果一篇文章的故事的字數已經達到了一定范圍,那么可能就會影響閱讀性。這個時候,我們就可以進一步的對其進行“分解”。
例如一本自傳體的長篇小說,一個人一生中可以描述的情節有很多,那么它可能被搭建成如下結構:
有十篇用于描述其青年時期事跡的故事,我們將其提取出來放在一起,形成小說的第一篇:《我的青年時期》
有十篇用于描述其中年時期事跡的故事,我們也將其提取出來,作為小說的第二篇:《我的中年時期》..
從而以此類推。最終這個結構的總和被我們稱作“小說”。
Java中,也是一樣的。如果多個類綜合完成同一方面的功能實現,
那么我們也可以將這些類提取出來,形成一個“篇章”,Java中的**包結構**就是這個“篇章”。
而最終由多個包結構組合起來的整個程序,就是所謂的一個完整的Java項目。
再壯觀的高樓大廈,究其根本也不過就是由眾多數量的鋼精水泥搭建起來的。
而建筑師能做的就是通過設計手段(招式)讓大樓的結構更加穩固,美觀和實用。
我們談到,之所以對一篇長篇小說進行這樣的結構搭建。是因為當文章字數達到一定量的時候,就會影響閱讀性,其主題也會模糊。
所以在Java中也是同樣的道理,這一定程度上也是“代碼重構”的初衷之一。類應該具有足夠的功能特性化。
前面我們說到的是**程序的結構**,但同時我更想重點談到的是Java的**基礎語言要素**的使用。
但是在了解了程序的結構之后,我們相對就更容易了解基礎語言要素的意義了。
同樣以作文為例,了解作文結構是必要的。但我們還應該做的,就是以結構為切入點,
繼續深入看一篇作文的基礎要素與基礎成分,也就是是:標點符號,詞語,語句之類的東西。
因為即使你對于作文結構的研究再深,如果不會使用文字,不會使用標點,不會書寫語句,那一切都是空談。
同理,假設我們要搭建一所房屋。需要了解房屋的結構構成要有臥室,廚房,浴室,客廳。
但僅僅是了解這樣的結構,也許足夠成為一名在紙上畫房屋結構設計圖的設計師;但還不足以讓你真的搭建出一所房子。
要成功的搭建出房子,還需要了解房屋的構建成分也就是材料,如同水泥,鋼筋,一些建材等等。
那么對應到Java中來說,其實也是一樣的道理。
而Java為我們提供的材料(基礎語言要素),包括:
標示符、關鍵字、注釋、常量(變量)、運算符、表達式以及程序語句。
到了這里我們再對前面說到的“類聲明、變量、方法”的Java類的結構構成,進行成分分析:
類聲明 = 訪問修飾符關鍵字 + 類聲明關鍵字 + 類名標示符。
變量(常量) 的聲明 =? 訪問修飾符關鍵字 +? 數據類型(基本數據類型或對象數據類型) + 賦值運算符 + 變量或常量的值?
方法的聲明 = 訪問修飾符關鍵字 + 類/變量/方法修飾符關鍵字 + 返回類型關鍵字 + 方法名標示符 + 方法參數列表(局部變量)
而方法的內容通常就是通過對:運算符、表達式、程序語句(簡單語句和復合語句)組成“招式”,完成對數據(變量等)的操作。
~~~
//類聲明
public/* 訪問修飾符關鍵字 */class /* 類聲明關鍵字 */JavaArticlescrap /* 類名標示符 */{
private/* 訪問修飾符關鍵字 */int /* 數據類型 */num_1 /* 變量標示符 */= /* 賦值運算符 */10;
private int num_2 = 20;
public/* 訪問修飾符關鍵字 */static/* 靜態修飾符關鍵字 */int /* 方法返回類型 */getSum /* 方法名標示符 */(
int a, int b)/* 參數列表(局部變量) */{
int sum = a + b; // 運算符、表達式、語句等等方法內容
return sum;
}
}
~~~
由此我們簡單的總結一下,一個Java程序的編寫工作,實際通常就是:
根據“需求”,通過對Java基礎語言要素(示符、關鍵字、注釋、常量(變量)、運算符、表達式以及程序語句)的使用,組成“招式”。
寫一篇結構為:題目(類聲明) + 人、物、地點(變量/常量聲明) + 段落(方法/函數)的“作文”。
- 前言
- 第一個專欄《重走J2SE之路》,你是否和我有一樣的困擾?
- 磨刀不誤砍材工 - 環境搭建(為什么要配置環境變量)
- 磨刀不誤砍材工 - Java的基礎語言要素(定義良好的標示符)
- 磨刀不誤砍材工 - Java的基礎語言要素(關鍵字)
- 磨刀不誤砍材工 - Java的基礎語言要素(注釋-生成你自己的API說明文檔)
- 磨刀不誤砍材工 - Java的基礎語言要素(從變量/常量切入,看8種基本數據類型)
- 磨刀不誤砍材工 - Java的基礎語言要素(運算符和表達式的應用)
- 磨刀不誤砍材工 - Java的基礎語言要素(語句-深入理解)
- 磨刀不誤砍材工 - Java的基礎語言要素(數組)
- 換一個視角看事務 - 用"Java語言"寫"作文"
- 牛刀小試 - 淺析Java的繼承與動態綁定
- 牛刀小試 - 詳解Java中的接口與內部類的使用
- 牛刀小試 - 趣談Java中的異常處理
- 牛刀小試 - 詳解Java多線程
- 牛刀小試 - 淺析Java集合框架的使用
- 牛刀小試 - Java泛型程序設計
- 牛刀小試 - 詳細總結Java-IO流的使用