天天看點

道與JAVA(一)

我從2008年開始接觸道家,當時對道家思想感興趣是因為看了于丹教授的《于丹莊子心得》,覺得莊子這本書裡面有很多道理是相當相當牛逼的,然後就買了《道德經》和《南華經》,把源碼拿過來研究研究,不得不說道家思想确實太深奧了,拿着源碼啃了幾年,也就學了些皮毛,裡面的思想還是不得要領。後來因為一些緣故,接觸到了java語言,寫過安卓項目,看過安卓源碼,發現java很多思想和道家思想是相似相同的。道是無生有,道生一,java是類生對象。道是虛比實有用重要,java玩多态靠的就是抽象。學安卓也有兩年了,從安卓源碼和java設計思想或設計模式多多少少發現了道的影子,就把這些心得寫出來,如果大家覺得寫的有問題,可以提出來。

好戲開始

1,

道 可 道 , 非 常 道 。 名 可 名 , 非 常 名 。

無 名 天 地 之 始 ﹔ 有 名 萬 物 之 母 。

故 常 無 , 欲 以 觀 其 妙 ﹔ 常 有 , 欲 以 觀 其 徼 。

此 兩 者 , 同 出 而 異 名 , 同 謂 之 玄 。

玄 之 又 玄 , 衆 妙 之 門 。

先明白一個概念:什麼是類,什麼是對象?

一切你看不見的抽象都是類,比方說 人類,鳥類。

一切你能看得見摸得着的都是對象,比方說蒼老師(人類的執行個體),麻雀(鳥類的執行個體)。

java的邏輯是類生對象,那麼類是有什麼生成的呢?都是這些看不見的道了。

道是沒有名字的,叫做天地之始,道生出了類,類是一切對象的母親(由一個類去執行個體化出千千萬萬個對象),類就是萬物之母。

故常無,這個無指的是類,比方說人類,你能看見人類嗎?你能看見鳥類嗎?類是看不見的,雖然說每個類的對象各不相同,人類的執行個體(張三,李四,王五,這都是不同的人),但是從無(類)的角度來看他們都是相同的,他們都具有相同的屬性(年齡,性别),也具有相同的行為方法(生,老,病,死,吃,喝),不同的執行個體行為卻相同,這是很奇妙的。

故常有,這裡有指的是對象,人類執行個體化了兩個執行個體,一個是張三,一個是李四,在張三看來,李四和他是不相同的,而且他也能發現李四執行個體的方法(吃,喝)和他也不相同,注意,行為方法是固定的,但表現形式并不是在構造該方法的時候決定的,而是在把對象建立出來的時候決定的,人類這個類有個方法叫做吃,所有人(執行個體)都具備這個吃的方法,但表現形式确實在執行個體建立後決定,豪邁的人會大口吃,婉約的人會一丁點吃。回到主題,故常有欲以觀其繳,當對象建立出來之後,對象的行為方法表現特征也會被确定,或者說可以明确的知道這個對象是怎麼吃的。

無(類)和有(對象)都是出的方法,即向外界提供資訊告你外界我是誰我能幹嘛的方法,隻是類是從集合的角度,而對象是從個體的角度(體會這樣一句話,我養了1W頭能生産奶的奶牛,其中這一頭一天能生産10kg牛奶,奶牛是一個類,他們對外界提供的資訊是我能生産牛奶,但是能生産多少牛奶,這個從無(奶頭)來看是無法得知的,其中有一頭牛一天能生産10kg牛奶,這裡就是特制奶牛群中的某一頭奶牛,這頭奶牛對外界提供的資訊是我一天能生産10kg牛奶)。他們都是很玄妙的東西。

2,

天 下 皆 知 美 之 為 美 , 斯 惡 已 。

皆 知 善 之 為 善 , 斯 不 善 已 。

有 無 相 生 , 難 易 相 成 , 長 短 相 形 ,

高 下 相 盈 , 音 聲 相 和 , 前 後 相 随 。

恒 也 。 是 以 聖 人 處 無 為 之 事 ,

行 不 言 之 教 ﹔ 萬 物 作 而 弗 始 ,

生 而 弗 有 , 為 而 弗 恃 , 功 成 而 不 居 。

夫 唯 弗 居 , 是 以 不 去 。

繼承是一件很美好的東西,有些功能父類有,子類去繼承父類,也就繼承了父類的功能,不用在寫一些代碼去完成功能,也能從父類那裡把關系(多态)繼承下來。結果大家都去用繼承,比方說現在有個父類 鳥類,鳥類有吃(),喝(),走(),飛()方法,現在建立一個企鵝類,企鵝需要吃(),喝(),走()方法,不像自己寫怎麼辦,從鳥類去繼承,但繼承也會把飛()方法繼承下來,企鵝不會飛啊,這樣繼承就違反了裡氏代換原則,繼承是好,但是别濫用,應當先考慮複合。

實作類的方法都是實的(有方法體),接口的方法是虛的(沒有方法體),虛實互相結合,就構成了java最好玩的多态。

接口有所作為嗎?接口不能有執行個體,抽象方法都沒有方法體,以聖人處無為之事可以認為是架構師寫接口和抽象方法。可能有人會問,抽象方法的意義是什麼,我想告訴你們,抽象方法可以了解是一種承諾,或者目标,我創辦一家餐廳,我的目标就是提供美味的菜肴給顧客,這裡提供美味的菜肴就是抽象方法,因為這是在創辦餐館時期說的,此時什麼都沒有,卻需要先把目标定下來。抽象方法同樣是這樣,先一個業務子產品之前,先定義抽象方法(即業務子產品要給外界帶來什麼便利,或者直接點寫這子產品是做什麼的),有了方向,有了目标,做事就不會亂。

在java中,資源是有限的,一個類的執行個體該做的事情做完了,他也應該去了(被回收),雖然該執行個體幫我們做了很多事情,任務一旦完成,就必須離開,一個執行個體幫助我們做了多麼偉大艱巨的任務,他卻從來沒有提出要求要多活一會,也沒有罵我們卸磨殺驢,他悄悄地來,又悄悄地離去。正是因為他具有這樣的品質,我們才會一直用他。

3,

不 尚 賢 , 使 民 不 争

不 貴 難 得 之 貨 , 使 民 不 為 盜 ﹔

不 見 可 欲 , 使 民 心 不 亂 。

是 以 聖 人 之 治 ,

虛 其 心 ,

實 其 腹 ,

弱 其 志 ,

強 其 骨 。

常 使 民 無 知 無 欲 。

使 夫 智 者 不 敢 為 也 。

為 無 為 , 則 無 不 治 。

在java語言中,所有類都是平等的,所有類都是有用的,不可能放一兩個沒什麼用的類放在項目中,這些類沒有好壞貴賤之分,他們的價值展現在使用他們的時刻。

4,

道 沖 , 而 用 之 或 不 盈 。

淵 兮 , 似 萬 物 之 宗 ﹔ 湛 兮 , 似 或 存 。

吾 不 知 誰 之 子 , 象 帝 之 先 。

抽象是虛的,它的作用卻是無窮的。

5,

天 地 不 仁 , 以 萬 物 為 刍 狗 ﹔ 聖 人 不 仁 , 以 百 姓 為 刍 狗 。

天 地 之 間 , 其 猶 橐 鑰 乎 。 虛 而 不 屈 , 動 而 愈 出 。

多 言 數 窮 , 不 如 守 中 。

java是很無情的,局部對象用完之後垃圾回收機制就把他當垃圾回收了,确實很不仁義,但是如果因為一個局部對象做了一點點事情,在它沒有用的時候繼續給他記憶體資源讓他存活着,就會導緻記憶體緊張。java就像是一個竈台,使用對象好比是燒柴,柴的價值利用完了剩下一堆灰燼,就被回收了。

如果一個類對外暴露了很多方法,别的類就會通過這些方法,調用多了對象會發生本質的改變,是以要盡可能的少對外暴露方法或者屬性,老老實實的固守陣地。

6,

谷 神 不 死 , 是 謂 玄 牝 。

玄 牝 之 門 , 是 謂 天 地 根 。帛系 若 存 , 用 之 不 勤 。

類是靜态的,類是不朽的,類就像種子一樣,看起來不存在,但需要對象的時候卻可以不斷的創造。

7,

天 長 地 久 。

天 地 所 以 能 長 且 久 者 ,

以 其 不 自 生 , 故 能 長 生 。

是 以 聖 人 後 其 身 而 身 先 ﹔ 外 其 身 而 身 存 。

非 以 其 無 私 邪 。

故 能 成 其 私 。

接口是永恒的,實作類也許會變過來變過去,但接口卻很難發生變動,架構隻能接受接口類型,接口可以讓任意一個實作類被架構調用,可以認為接口是普度衆類,讓衆類抵達極樂世界(衆類被架構調用),接口是為了實作類而存在,不是為了自身而存在(接口不能new),是以接口可以長生。 接口雖然不能直接new,但可以說所有的實作類都是接口類型(即多态)。

8,

上 善 若 水 。

水 善 利 萬 物 而 不 争 ,

處 衆 人 之 所 惡 , 故 幾 于 道 。

居 善 地 , 心 善 淵 , 與 善 仁 ,

言 善 信 , 政 善 治 , 事 善 能 ,

動 善 時 。 夫 唯 不 争 , 故 無 尤 。

java很容易上手,不僅是因為java沒有惡心的指針和多繼承,而是java api有很多容易上手非常好用的類,比方說String,在一個項目很多地方都能看到String類,他默默的服務所有類,不要名不要利,類方法很好用,大大的友善了開發者。