自拍偷在线精品自拍偷|国产无码一区二区久久|最新版天堂资源中文官网|国产精品第一页爽爽影院|国产精品一区二区av不卡|久久久波多野av一区无码|国产欧美日本亚洲精品一4区|亚洲精品天堂在线观看2020

當(dāng)前位置:首頁 > 軟件開放 > 正文內(nèi)容

怎么看懂java代碼電子書下載(怎么看懂java代碼電子書下載的文件)

軟件開放2年前 (2023-01-30)876

本篇文章給大家談?wù)勗趺纯炊甹ava代碼電子書下載,以及怎么看懂java代碼電子書下載的文件對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

求一份完整的java自學(xué)學(xué)習(xí)方法?

java自學(xué)網(wǎng)Java從入門到精通(第3版)PDF電子書.zip? ?免費(fèi)下載

鏈接:? ?

提取碼: wut5

?Java是一門面向?qū)ο蟮木幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強(qiáng)大和簡單易用兩個(gè)特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 ?

怎么讀懂JAVA和C++代碼??

簡介

我聽很多人和我說他們擅長C++或Java但是完全搞不懂Smalltalk。按他們的說法Smalltalk有若天書!我想了一下,覺得他們說的或許非常在理。假如我只懂Java,如果我從多年以來寫的代碼里隨便挑一段我肯定看不懂它。在理解Smalltalk之前必須要澄清一些很簡單的概念連帶一些細(xì)微詭異的語法概念。要是“老王不懂Smalltalk”,也許我能對他的狀況進(jìn)行改善。我希望能讓讀者快速上手。我假設(shè)讀者懂面向?qū)ο缶幊?。如果你已?jīng)會Smalltalk了就請恕我班門弄斧一下。

噢詞法細(xì)節(jié)真簡單

初讀 Smalltalk遇見的一些協(xié)定和慣用法細(xì)節(jié)可能與其它語言大相徑庭從而把你搞暈,像雙引號括注釋,單引號括字符串,還有字符的特殊語法表示(例:$x代表“x”)。還有symbol的概念,symbol是在內(nèi)存中僅有唯一實(shí)例的字符串;例如,當(dāng)一個(gè)symbol被構(gòu)造時(shí)(通常是編譯期),先從內(nèi)存里查找是否相同的實(shí)例,如果有則直接使用。這樣做目的不是節(jié)省內(nèi)存而是優(yōu)化比較效率(下文詳述):

"this is a comment"

'this is a string'

#'this is a symbol'

#thisIsASymbolToo

賦值和比較運(yùn)算符有細(xì)微差別:

:= // 賦值

= // 內(nèi)容相等比較,深比較

== // 唯一性比較,淺比較

如果你給我兩個(gè)被不同變量“a”和“b”引用的不同對象,我就能告訴你它們是不是相同對象(通過a == b進(jìn)行)或者只是看起來相同的不同對象(通過a = b進(jìn)行)。直白的說,==比較兩個(gè)指針而=比較對象的整個(gè)內(nèi)容。

Smalltalk中很少出現(xiàn)逗號,因?yàn)樗怀洚?dāng)語法要素。這就是為什么數(shù)組直接明了,例如下面沒有冗余逗號的數(shù)組:

#(1 2 3 4 5)

盡管如此逗號還是有意義的,它是一個(gè)運(yùn)算符。你偶爾能看到它被用來連接兩個(gè)字符串,例如:

'string1','string2'

關(guān)鍵字無孔不入

在Smalltalk中關(guān)鍵字無處不在。但它們有益于可讀性而不是擾亂。想知道為什么,讓我們從一個(gè)C++和Java片斷入手。例如你可能對下面的寫法再熟悉不過了:

t-rotate(a, v); // C++

t.rotate(a, v); // Java

t對象被夾帶著參數(shù)a和v發(fā)送了rotate消息。讀者想理解這樣的代碼通常需要找到變量的聲明處并判斷出類型。我們假定聲明如下:

Transformation t;

float a;

Vector v;

在Smalltalk中變量可以引用任意類型的對象。所以類型說明不需要,但是我們還是要聲明一下變量,例如:

|t a v|

在不看聲明的情況下,好的Smalltalk程序員會通過變量顧名思義判斷其類型。那么我們換一種寫法如下:

|aTransformation angle aVector|

但請?jiān)试S我繼續(xù)沿用最初的短命名來避免示例代碼太長影響閱讀。我們來通過去除不必要的因素來“改進(jìn)”C++和Java的語法。例如,下面的代碼仍然明了:

t.rotate(a, v); // 原始寫法

t rotate(a, v); // 誰需要點(diǎn)號?

t rotate a, v; // 誰需要括號?

為了進(jìn)一步改進(jìn)語法我們需要知道參數(shù)a和v代表什么。我們假定整個(gè)示例意為“繞向量v旋轉(zhuǎn)角度a(譯注:rotate by angle a around vector v)”。則進(jìn)一步改進(jìn)為:

t rotate by a around v; // 誰需要逗號?

我們能明確每個(gè)成分是什么嗎?沒問題,因?yàn)樵谖覀兏倪M(jìn)的這個(gè)示例中,“t”是一個(gè)變量,“rotate”是方法名,“by”是分隔符,“a”是變量,“around”是分隔符,最后的“v”也是一個(gè)變量。為了消除潛在歧義我們設(shè)立一個(gè)規(guī)定:分隔符后面緊跟一個(gè)冒號。我們得到:

t rotate by: a around: v; // 誰需要模棱兩可?

最后我們強(qiáng)調(diào)一下分隔符是方法名的一部分;例如我們假定需要一個(gè)形如“rotate by: around:”的函數(shù),去掉空格我們得到“rotateby: around”作為最終命名,再將非首單詞首字母大寫來提高可讀性得到“rotateBy: around”。那么我們的示例可以寫為:

t rotateBy: a around: v // 這才是Smalltalk

方法名被打碎成幾部分。幸運(yùn)的是聚攏這些碎片成一個(gè)完整的名字很容易。當(dāng)在類中時(shí)我們?nèi)缦露x方法名:

self rotateBy: angle around: vector

|result|

result := COMPUTE ANSWER.

^result

在運(yùn)行時(shí),“t”和“self”,“a”和“angle”,“v”和“vector”之間有著一對一的關(guān)系。注意“^”意味著結(jié)果被返回了;這是 Smalltalk中“return”關(guān)鍵字的寫法。變量“self”是“this”的同意字,如果方法結(jié)束沒有返回語句則“^self”被當(dāng)作隱含語句執(zhí)行;你可能完結(jié)一個(gè)方法時(shí)忘記添加返回語句,但沒事。這也意味著即使消息發(fā)送者不需要返回值,方法也會返回它。

實(shí)際上被慣用的地道Smalltalk語法要求“self”不顯式的出現(xiàn)在方法頭(但必隱含),例如:

rotateBy: angle around: vector

|result|

result := COMPUTE ANSWER.

^result

關(guān)鍵字語法的精妙之處在于我們可以為不同的方法定義不同的關(guān)鍵字。例如我們可以如下定義第二個(gè)方法:

t rotateAround: vector by: angle

不必死記硬背參數(shù)順序。關(guān)鍵字提示我們順序。當(dāng)然程序員有濫用關(guān)鍵字的能力,例如如果我們?nèi)缦露x關(guān)鍵字:

t rotate: angle and: vector

讀者很難弄清參數(shù)正確的順序。這就是個(gè)極差的編程風(fēng)格,如果只有一個(gè)參數(shù)還好辦。只有一個(gè)參數(shù)時(shí)我們?nèi)匀恍枰椒焕纾?/p>

t rotateAroundXBy: angle

t rotateAroundYBy: angle

我們希望關(guān)鍵字(因冒號而易區(qū)分)成為參數(shù)的說明。但方法沒有參數(shù)時(shí)怎么辦:

t makeIdentity: // 結(jié)尾的冒號有意義嗎?

如果關(guān)鍵字代表參數(shù)的說明,那我們在沒有參數(shù)的情況就用不到關(guān)鍵字。所以零參數(shù)的消息應(yīng)為:

t makeIdentity // 這才是Smalltalk

當(dāng)然二元操作符同理,但一元操作符(makeIdentity是一元消息但不是一元操作符)并非如此。當(dāng)多種消息一起出現(xiàn)時(shí)我們的表達(dá)式也許形如:

a negative | (b between: c and: d)

ifTrue: [a := c negated]

作為讀者應(yīng)該知道“a”被發(fā)送了一個(gè)返回true或者false的名為“negative”(零參數(shù))的消息;“b”也被發(fā)送了一個(gè)返回true或者 false的為“between: c and: d”的消息。兩項(xiàng)的結(jié)果or到一起成為消息“ifTrue: [a := c negated]”的接收者。這就是if-then控制結(jié)構(gòu)的地道寫法而不是特殊語法。僅是以布爾值作為接收者,以“ifTrue”作為關(guān)鍵字,并且以“[a := c negated]”(我們稱其block)作為參數(shù)的標(biāo)準(zhǔn)關(guān)鍵字語法。在Smalltalk中你永遠(yuǎn)遇不到“a := -c”因?yàn)椴淮嬖谝辉僮鞣銜吹健?5”這種常量,“-”在此充當(dāng)常量的一部分。

所以如果你看到形如“-3.5 negated truncated factorial”的表達(dá)式時(shí)應(yīng)該立即意識到這其中沒有關(guān)鍵字。所以“-3.5”必定是被發(fā)送了“negated”消息;執(zhí)行結(jié)果3.5被發(fā)送了“truncated”消息;然后執(zhí)行結(jié)果3被發(fā)送了“factorial”,產(chǎn)生最終結(jié)果6。

當(dāng)然,還有諸如運(yùn)算優(yōu)先級的規(guī)則(從左到右),消息優(yōu)先級(零參數(shù)最高,二元運(yùn)算次之,最后關(guān)鍵字)。寫代碼時(shí)這些很重要,但讀代碼不必刻意在意這些細(xì)節(jié)。如下從左到右的表達(dá)式:

1 + 2 * 3 得 9

沒有優(yōu)先級,但是你很難遇到有Smalltalk程序員這么寫表達(dá)式,因?yàn)檫@會迷惑非Smalltalk讀者。一般Smalltalk程序員使用如下替代寫法:

(1 + 2) * 3

即使括號是沒必要的。

分號和句號不同

大多數(shù)非Smalltalk程序員把分號當(dāng)成語句結(jié)束的標(biāo)識,但在Smalltalk中使用句號表達(dá)此意。所以我們不會寫:

account deposit: 100 dollars;

collection add: transformation;

而是寫成:

account deposit: 100 dollars.

collection add: transformation.

嗯!“dollars” 消息迷惑你了嗎?不要覺得不可思議。此處必有一個(gè)在Integer類中構(gòu)造一個(gè)“Dollar”對象并返回它的名為“dollars”的方法。它不是 Smalltalk標(biāo)準(zhǔn)環(huán)境中的但是我們可以擴(kuò)充它?;▋?nèi)建)類可以在需要時(shí)像用戶自定義類那樣被擴(kuò)充。

所以,句號是語句終止符號而且在最后一條語句中是可選的(如果你愿意,可以把它當(dāng)成語句終止符)。但分號仍然是合法的特殊分隔符(不是終止符)。它被用來指定接收者是可縮略的。所以,如下寫法:

|p|

p := Client new.

p name: 'Jack'.

p age: 32.

p address: 'Earth'.

可以寫為:

|p|

p := Client new.

p

name: 'Jack';

age: 32;

address: 'Earth'.

或者更好的寫法:

|p|

p := Client new

name: 'Jack';

age: 32;

address: 'Earth'.

Smalltalk對排版不敏感。我們甚至可以把所有語句放到同一行中。本質(zhì)上講分號指定前一個(gè)消息被發(fā)送用來修改接收者,并且下一個(gè)消息應(yīng)當(dāng)被發(fā)送給相同的接收者(而不是被發(fā)送到被忽略拋棄的運(yùn)算結(jié)果)。

最后的例子中,“new”被發(fā)送給一個(gè)類以獲得實(shí)例(運(yùn)算結(jié)果)。然后“name: 'Jack'”被發(fā)送給那個(gè)實(shí)例。第一個(gè)分號指定“name: 'Jack'”的結(jié)果被忽略,“age: 32”應(yīng)被發(fā)送給之前的接收者(相同的那個(gè)實(shí)例)。第二個(gè)分號指定“age: 32”的結(jié)果被忽略,“address: 'Earth'”應(yīng)被發(fā)送給之前的接收者(仍然是那個(gè)相同的實(shí)例)。最后“address: 'Earth'”的運(yùn)算結(jié)果被賦值給p。修改接收者的方法通常返回接收者本身,所以p被綁定到最近修改的Client實(shí)例上。

我們可以通過用英文詞組“AND ALSO”取代分號來簡化上面的賦值。即“new”被發(fā)送給類“Client”,并且結(jié)果實(shí)例被發(fā)送了“name: 'Jack'” AND ALSO “age: 32” AND ALSO “address: 'Earth'”消息。重復(fù)的向相同接收者發(fā)送不同的消息在Smalltalk中被稱為層疊(譯注:cascading)。分號也可以出現(xiàn)在子表達(dá)式中,如“p := (Client new name: 'Jack'; age: 32; address: 'Earth')”——注意圓括號。

Get/Set方法與變量實(shí)例同名

在Smalltalk中諸如name,age,address這樣的Client類實(shí)例的成員變量都是private的。但可以通過實(shí)現(xiàn)一定的方法訪問它們。例如在C++(Java類似)中,我們經(jīng)常寫出如下訪問方法(通常被稱為get/set方法):

long getAge() { return age; }

void setAge(long newAge) { age = newAge; }

如果你在大把的類上應(yīng)用這種方式,你將寫出成百個(gè)以get和set開頭的消息。如果你偶然決定通過使用精簡的命名來簡化這些方法(稍后寫出),即便Java編譯器能做出正確識別,也會給C++編譯器造成解析混亂,因?yàn)樗鼰o法區(qū)分變量和方法:

long age() { return age; }

void age(long newAge) { age = newAge; }

你能區(qū)分變量“age”和消息“age”嗎?理應(yīng)區(qū)分。當(dāng)你使用消息時(shí)需要帶上圓括號如“age()或age(22)”;當(dāng)你使用變量時(shí)就不必帶上圓括號。Smalltalk中的等價(jià)寫法為:

age ^age

age: newAge age := newAge

我們通常使用如下分行寫法來提高可讀性:

age

^age

age: newAge

age := newAge

在Smalltalk中你不必依賴圓括號就能輕松區(qū)分變量和消息。如果你對它們的區(qū)別很明了,就能看出下面的表達(dá)式有多少個(gè)變量:

age age age: age age + age age

嗯!答案是3個(gè);第一個(gè)和第四個(gè)age必為變量(緊跟關(guān)鍵字的子表達(dá)式和所有表達(dá)式必以一個(gè)變量開頭),第七個(gè)也必為變量(二元操作符后的子表達(dá)式也必以一個(gè)變量開頭)。再看一個(gè)更明顯的類似的典型例子:

name size // name必為變量

self name // name必為變量

廣泛使用的集合

在Smalltalk中使用最普遍的兩種集合分別是有序集合(ordered collection)和字典(dictionary)。數(shù)組的概念等效于大小不可變的有序集合。

|a b|

a := OrderedCollection new

add: #red;

add: #green;

yourself.

b := Dictionary new

at: #red put: #rouge;

at: #green put: #vert;

yourself.

上面的每個(gè)賦值中變量都被綁定到最后一條消息的執(zhí)行結(jié)果上;例如“yourself”的結(jié)果就是最后一次創(chuàng)建的集合。“yourself”消息被設(shè)計(jì)成返回消息接收者(像個(gè)無運(yùn)算操作)但“add:”和“at: put:”并非如此(它們返回最后一個(gè)參數(shù))。所以如果沒有“yourself”就成了“a”綁定到“#green”,“b”綁定到“#vert”。

我故意使用層疊寫法來解釋“yourself”為什么獨(dú)立的出現(xiàn)在內(nèi)建類的方法中。

Smalltalk中集合的優(yōu)勢是你可以存任意類型的對象進(jìn)去。即使是字典中的鍵都可以使任意類型;同一集合中的對象也可以是不同類型。我們不必為了在一個(gè)實(shí)例中聚集一批新的類型而重新發(fā)明新的集合類型。

可以像訪問數(shù)組一樣訪問有序集合;例如“a at: 1”索引到元素1。字典也能用相同的方式訪問;例如“b at: #red”。但很多應(yīng)用場合我們不必關(guān)心鍵。如此這般,元素迭代循環(huán)很容易:

a do: [:item |

USE item FOR SOMETHING].

b do: [:item |

USE item FOR SOMETHING].

即便集合中的元素是不同類型的,“item”變量也會一個(gè)接一個(gè)的獲取到每一個(gè)元素。如果需要我們能在運(yùn)行時(shí)知道一個(gè)對象是什么可以寫成“item isKindOf: Boat”,它返回true或false。同時(shí)還有許多特殊類型查詢消息,像“item isCollection”或“item isNumber”。更進(jìn)一步還有很多創(chuàng)建新的集合的循環(huán)構(gòu)造消息如:

c := clients select: [:client | client netWorth 500000].

d := clients collect: [:client | client name].

上例中前者我們得到大款客戶的集合。后者我們獲得客戶名字的集合(原始集合是一堆客戶的集合)。

有序抽象無需新類的構(gòu)建

讀者經(jīng)??吹饺缦麓a:

stuff value: x value: y value: z

此處關(guān)鍵字全是“value:”。對一個(gè)非Smalltalk程序員來說這樣寫毫無意義混亂不堪。程序員在此已經(jīng)(而且經(jīng)常)創(chuàng)建新的抽象。

讓我來解釋一下僅有Smalltalk支持的特性。還以我們已經(jīng)多次介紹的Client類為例,假設(shè)我們有一個(gè)遍歷某個(gè)客戶所有部分的簡單需求;例如我們想先遍歷到name,然后是age,最后是address。

C++ 和Java對此需求的慣例解決方案是創(chuàng)建一個(gè)新的特殊流化(stream)類或枚舉器(enumerator)類,也許叫ClientIterator,它帶有初始化、判斷是否迭代結(jié)束、如果未結(jié)束迭代下一個(gè)對象的迭代器等方法。利用這些方法我們就能寫一個(gè)循環(huán)初始化迭代器,獲取下一個(gè)對象并處理它直到迭代結(jié)束。迭代器的優(yōu)點(diǎn)是在順序處理中它能提供一個(gè)單獨(dú)的變量用于跟蹤迭代到的位置;沒必要把Client類展開成用于迭代的“臨時(shí)”變量。

下面是一段刻意抽象的代碼:

aClient := CODE TO GET ONE.

aClient partsDo: [:object |

object printOn: Transcript]

注意partsDo:像一個(gè)以object為循環(huán)變量的循環(huán)。第一次遍歷我們得到name并打印到transcript(一個(gè)Smalltalk編程環(huán)境中特殊的工作區(qū))。然后第二次遍歷得到age,最后第三次遍歷得到address。同樣值得注意的是“partsDo:”是一個(gè)以“aClient”為接收者,以“[:object | object printOn: Transcript]”(一個(gè)block)為參數(shù)的關(guān)鍵字消息。

在深入之前我先給出Smalltalk的解決方案。然后我解釋一下它的工作原理并給出更多的慣用法的例子。我們要做的就是給Client添加如下方法:

partsDo: aBlock

aBlock value: self name.

aBlock value: self age.

aBlock value: self address.

要理解這段代碼要先認(rèn)清這些block是匿名函數(shù)。為了更好的理解我所講,請?jiān)O(shè)想我們想把一個(gè)函數(shù)賦值給一個(gè)變量但是不調(diào)用它。我來寫出它的類C語法風(fēng)格寫法(我知道用C語法做這件事的確切寫法,不過那對闡述關(guān)鍵思想沒有什么幫助;所以我就不寫嚴(yán)格的C語法了):

a = f(x) { return x + 1; } // 類C風(fēng)格語法

a := [:x | x + 1] // Smalltalk語法

這里變量“a”成了一個(gè)函數(shù)對象。f是一個(gè)函數(shù),因此我們可以通過“f(10)”調(diào)用它得到11。但我們還能通用執(zhí)行“a(10)”調(diào)用它因?yàn)閍的值是一個(gè)函數(shù)。通過變量“a”執(zhí)行函數(shù)不需要知曉和它原始名相關(guān)的信息。

所以在Smalltalk中我們甚至不糾結(jié)于函數(shù)的名字。我們可以輕易的把它賦給任意一個(gè)變量并通用此變量使用它。在上面簡單演示函數(shù)調(diào)用的例子中,我們設(shè)定“a value: 10”使它返回11。在執(zhí)行過程中,參數(shù)x被綁定為10,參與x + 1運(yùn)算,一直執(zhí)行到block末時(shí)最終計(jì)算出的結(jié)果被返回。

通常我們極少直接執(zhí)行block。取而代之的我們寫成形如“partsDo:”,隱藏笨拙的block“調(diào)用”來提供抽象功能。

來看更多的例子。假設(shè)我們有一個(gè)維護(hù)一個(gè)旅客鏈表的Airplane類。我們嘗試一下遍歷訪問旅客中的所有兒童(假設(shè)定義12歲及以下為兒童)。實(shí)現(xiàn)此功能的代碼如下:

anAirplane passengers do: [: person |

person age = 12

ifTrue: [.. DO SOMETHING with person ..]]

如果我們需要在其它上下文中遍歷訪問兒童,稍作抽象會很有助于簡化代碼。我們所需要做的就是在Airplane類中實(shí)現(xiàn)一個(gè)名為“kidsDo:”的抽象(為便于引用說明,我為代碼加上了行號):

1. kidsDo: aBlock

2. "此處self是一個(gè)Airplane"

3. self passengers do: [:person |

4. person age = 12

5. ifTrue: [aBlock value: person]]

我們調(diào)整示例代碼如下來表述抽象:

6. anAirplane kidsDo: [:kid |

7. .. DO SOMETHING with kid ..].

8. "完成。"

你能看出第6行代碼是如何工作的嗎?當(dāng)?shù)?行的“kidsDo: ...”消息執(zhí)行時(shí)第一行的“kidsDo:”方法就被調(diào)用了。然后第1行的變量“aBlock”就被綁定了“[:kid | .. DO SOMETHING with kid ..]”(暫且稱其kid block)。kidsDo:方法中第3行的“do:”會遍歷所有旅客。第5行中aBlock僅在旅客年齡不高于12歲時(shí)才被發(fā)送一個(gè)“value:”消息。當(dāng)以“person”為參數(shù)的“value:”消息執(zhí)行時(shí),就會引發(fā)一個(gè)對kid block的函數(shù)調(diào)用并導(dǎo)致“kid”綁定到“person”和第7行的“.. DO SOMETHING with kid ..”。執(zhí)行到block末時(shí)執(zhí)行流程從“kidsDo:”返回到“do:”循環(huán)(第5行末),然后繼續(xù)如此處理其他kid。循環(huán)結(jié)束后執(zhí)行流程從第6行進(jìn)行的“kidsDo:”方法調(diào)用返回并到達(dá)第8行。

一言以蔽之,第6行的代碼導(dǎo)致第1到第5行的代碼循環(huán)執(zhí)行,1到5行又會使kid block(第7行)執(zhí)行。

總體上說,block為Smalltalk提供了一種最簡潔的實(shí)現(xiàn)控制流抽象的手段。它也同樣被精妙的設(shè)計(jì)用來執(zhí)行語義上的返回語句,而且這是唯一可以表達(dá)此語義的方式。讓我通過給Airplane添加一個(gè)和第6到8行類似的方法來闡述這個(gè)問題:

10. findAnySickKid

11. "這里self也是一個(gè)AirPlane"

12. self kidsDo: [:kid |

13. kid isSick

14. ifTrue: [^kid]].

15. ^nil "不存在生病的"

通讀代碼,我相信你不會看出什么不尋常之處。這也是一個(gè)遍歷飛機(jī)上所有兒童的循環(huán)。如果發(fā)現(xiàn)了一個(gè)生病的兒童就返回。另外,更進(jìn)一步的迭代下去如果沒有生病的兒童循環(huán)終止并返回nil(一個(gè)可被容易檢測的特殊對象)。那這里值得注意的是什么呢?嗯有三點(diǎn)重要的地方:第10行findAnySickKid方法開始處,第1行kidsDo:方法開始處,還有最后第13、14行kid block。通過執(zhí)行“anAirplane findAnySickKid”,先后調(diào)用了方法findAnySickKid,進(jìn)而調(diào)用kidsDo:,進(jìn)而kid block。在kid block里面執(zhí)行“^kid”并不返回給發(fā)送者(kidsDo方法)而是返回給findAnySickKid的發(fā)送者。不管從kidsDo:到kid block內(nèi)部的消息鏈多長,“^kid”始終從findAnySickKid返回。恕我孤陋寡聞還沒聽說過這個(gè)特性的稱謂,我個(gè)人稱其短路返回(譯注:short circuit return)。

請問怎么快速看懂java代碼?

這代碼有兩個(gè)重點(diǎn):一是entity是個(gè)什么類型,大概是數(shù)據(jù)庫映射的實(shí)體類,那么就要多看看相關(guān)的書籍了,二是業(yè)務(wù)邏輯,也就是和訂單相關(guān)的一系列流程,先自己理理。我比較熟悉C#,對java一竅不通,看著和你一樣的發(fā)暈啊。

怎么看懂java代碼電子書下載的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于怎么看懂java代碼電子書下載的文件、怎么看懂java代碼電子書下載的信息別忘了在本站進(jìn)行查找喔。

掃描二維碼推送至手機(jī)訪問。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。

本文鏈接:http://www.thonggone.com/post/6247.html

“怎么看懂java代碼電子書下載(怎么看懂java代碼電子書下載的文件)” 的相關(guān)文章

軟件開發(fā)項(xiàng)目管理(軟件開發(fā)管理流程)

軟件開發(fā)項(xiàng)目管理(軟件開發(fā)管理流程)

今天給各位分享軟件開發(fā)項(xiàng)目管理的知識,其中也會對軟件開發(fā)管理流程進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、軟件項(xiàng)目的管理流程 2、軟件項(xiàng)目管理的建議 3、軟件項(xiàng)目的管理思路? 軟件項(xiàng)目的管理流程 導(dǎo)語:關(guān)于軟件項(xiàng)目的管理流程,相關(guān)人員來了解...

工業(yè)軟件開發(fā)(工業(yè)軟件開發(fā)難度)

工業(yè)軟件開發(fā)(工業(yè)軟件開發(fā)難度)

今天給各位分享工業(yè)軟件開發(fā)的知識,其中也會對工業(yè)軟件開發(fā)難度進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、工業(yè)軟件開發(fā)技術(shù)專業(yè)學(xué)什么 2、博士工業(yè)軟件開發(fā)有出路嗎 3、為什么工業(yè)軟件開發(fā)一般用的都是QT? 4、工業(yè)軟件和java后端開發(fā)的區(qū)別...

php開源博客系統(tǒng)(php 博客系統(tǒng))

php開源博客系統(tǒng)(php 博客系統(tǒng))

本篇文章給大家談?wù)刾hp開源博客系統(tǒng),以及php 博客系統(tǒng)對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、誰推薦一個(gè)好的個(gè)人博客源碼(PHP+MYSQL) 2、跪求一個(gè)好用的php blog源碼 3、php開發(fā)用什么軟件 4、類似WordPress的建站軟件還...

URL不合法怎么辦(url有問題怎么辦)

URL不合法怎么辦(url有問題怎么辦)

今天給各位分享URL不合法怎么辦的知識,其中也會對url有問題怎么辦進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、URL不合法怎么辦? 2、URL不合法啥意思 3、url不合法是怎么回事? URL不合法怎么辦? URL就是能獲取你要下載的資源的下...

陽臺的裝修設(shè)計(jì)圖片大全(陽臺的裝修設(shè)計(jì)圖片大全集)

陽臺的裝修設(shè)計(jì)圖片大全(陽臺的裝修設(shè)計(jì)圖片大全集)

本篇文章給大家談?wù)勱柵_的裝修設(shè)計(jì)圖片大全,以及陽臺的裝修設(shè)計(jì)圖片大全集對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、陽臺頂部裝修效果圖 小陽臺怎么設(shè)計(jì) 2、一樓陽臺裝修效果圖 6款陽臺設(shè)計(jì)隨你選 3、主臥陽臺裝修效果圖 多款溫馨雅致的室內(nèi)陽臺設(shè)計(jì) 陽臺頂部裝修...

404頁面模板下載(404頁面怎么寫)

404頁面模板下載(404頁面怎么寫)

本篇文章給大家談?wù)?04頁面模板下載,以及404頁面怎么寫對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、網(wǎng)站404頁面怎么設(shè)置 設(shè)置過程中需要注意那些東西 2、怎么給織夢網(wǎng)站做一個(gè)404頁面 3、網(wǎng)站404頁面怎么做 網(wǎng)站404頁面怎么設(shè)置 設(shè)置過程中需要注意...