常熟學(xué)java開(kāi)發(fā)_JAVA培訓(xùn)
¥3800.00元
班制:周末班
蘇州其然軟件開(kāi)發(fā)其然IT教育集團(tuán)是廣州騰科網(wǎng)絡(luò)技術(shù)有限公司旗下運(yùn)營(yíng)的網(wǎng)站平臺(tái)。其然IT 教育集團(tuán)是一家以提供新型、**的IT技術(shù)培訓(xùn)(教育)解決方案為主要經(jīng)營(yíng)目標(biāo)的專業(yè)公司,是中國(guó)高端IT培訓(xùn)的**品牌。聯(lián)合思科(Cisco)、甲 骨文(Oracle)、紅帽(Red Hat)、華為(Huawei)、微軟(Microsoft)、美國(guó)計(jì)算機(jī)行業(yè)協(xié)會(huì)(CompTIA)等國(guó)際知名IT廠商以 及國(guó)內(nèi)300多家高等院校, 開(kāi)展IT認(rèn)證技能培訓(xùn)和IT職業(yè)課程教育,培養(yǎng)新型IT高級(jí)人才,是Pearson VUE國(guó)際電子考試中心和Prometric(普爾文)授權(quán)考試中心,并是達(dá)索 (solidworks)、安氏(LinkTrust)的授權(quán)經(jīng)銷商。
其然IT教育集團(tuán)下轄上海分公司、深圳分公司、武漢分公司、杭州分公司等 8個(gè)分支機(jī)構(gòu)。以及30多個(gè)培訓(xùn)網(wǎng)點(diǎn),業(yè)務(wù)涵蓋全國(guó)主要大、中型城市。
java入門(mén)要注意什么
學(xué)習(xí)java就像是一個(gè)種花的過(guò)程,不斷地為其施肥澆水,它才會(huì)茁壯成長(zhǎng)。 而我們學(xué)習(xí)java,就要不斷的充實(shí)自己、提升自己,才能獲得更多機(jī)會(huì)。很多開(kāi)始學(xué)習(xí)java編程的小白,經(jīng)常就會(huì)被概念、定義什么的搞糊涂。當(dāng)分類 、對(duì)象、接口、構(gòu)造函數(shù)等等各種專業(yè)名詞出現(xiàn)的時(shí)候,你一定是腦子里好像一片空白,根本就搞不懂這些字眼的意思和關(guān)系,而且,這種情況下,很 容易導(dǎo)致你喪失自信心,開(kāi)始逃避、拒絕,這些小白經(jīng)常遇到的情況在我剛接觸java的時(shí)候也遇見(jiàn)了,但是好在我足夠幸運(yùn),遇見(jiàn)了誠(chéng)筑說(shuō)。我現(xiàn)在已 經(jīng)是公司的項(xiàng)目經(jīng)理了,今天,我為大家來(lái)總結(jié)了一些經(jīng)驗(yàn)和建議,希望能夠幫助到大家。
一點(diǎn):熟練基本的j2seAPI
除去java語(yǔ)言本身的語(yǔ)法之外呢,要懂得并且熟練j2seAPI的API也是非常有 必要的,在這里,就建議大家首先去掌握字符串的處理、異常的處理、容器、輸入輸出、線程等,這些相對(duì)來(lái)說(shuō)較為重要的。還有就是API的內(nèi)容是非 常龐大的,關(guān)于API,一定要懂得查詢API的文件說(shuō)明,在了解了其作用用途或者目的才能夠進(jìn)行相對(duì)于的程序。
二點(diǎn):穩(wěn)固java的語(yǔ)法基礎(chǔ)
學(xué)習(xí)java一定要學(xué)會(huì)使用java的程序語(yǔ)言,用來(lái)編寫(xiě)程序,但是學(xué)習(xí)程序語(yǔ) 言就要熟悉語(yǔ)法是怎么使用的。程序語(yǔ)言其實(shí)也是一種語(yǔ)言,不過(guò)跟人類的語(yǔ)言不同,這種語(yǔ)言是要和計(jì)算機(jī)溝通交流,那怎么做才能熟悉這種語(yǔ)言呢 ,我給出的建議是多看別人寫(xiě)的程序,了解人家是怎么用java來(lái)解決問(wèn)題的。然后再找類似的程序去練習(xí)了,這樣就能夠從實(shí)際操作中檢驗(yàn)自己是否真 的知道該怎么去解決問(wèn)題了。
三點(diǎn):加入貼吧論壇多參與討論
根據(jù)我當(dāng)時(shí)的經(jīng)驗(yàn),在大家學(xué)習(xí)的過(guò)程中,如果有人可以參與話題,共同討 論的話,會(huì)加快你學(xué)習(xí)的速度。所以大家可以和我一樣,找一個(gè)技術(shù)討論的地方,貼吧啊,論壇啊都可以,在這里進(jìn)行討論,畢竟大家有著共同的目標(biāo) 和理想,有著共同的話題可聊,這樣的話,又大大節(jié)省了學(xué)習(xí)的時(shí)間。
學(xué)完基本的java語(yǔ)法呢,現(xiàn)在就該用java來(lái)進(jìn)行實(shí)際的編程了,假如你需要 編寫(xiě)窗口程序,那就學(xué)Swing窗口設(shè)計(jì);假如你要編寫(xiě)數(shù)據(jù)庫(kù)什么的,那就學(xué)JDBC等等。
Java課程介紹 :
Java企 業(yè)級(jí)應(yīng)用
“就業(yè)班”
一階段 Java語(yǔ)言核心
第二階段 數(shù)據(jù)庫(kù)及Web前端技術(shù)
第三階段 Java Web開(kāi)發(fā)及服務(wù)端 框架
第四階段 綜合項(xiàng)目實(shí)踐
Java課程介紹
Java企業(yè)級(jí)應(yīng)用
“就業(yè)班”
一階段 Java語(yǔ)言核心
二階段 數(shù)據(jù)庫(kù)及Web前端技術(shù)
三階段 Java Web開(kāi)發(fā)及服務(wù)端框架
四階段 綜合項(xiàng)目實(shí)踐
Java互聯(lián)網(wǎng)開(kāi)發(fā)
“培優(yōu)班”
一階段 Java語(yǔ)言核心
二階段 Java Web服務(wù)端技術(shù)
三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)
四階段 Java互聯(lián)網(wǎng)架構(gòu)
職場(chǎng)華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實(shí)訓(xùn)項(xiàng)目
“愛(ài)逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)
培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)
“培優(yōu)班”
一階段 Java語(yǔ)言核心
第二階段 Java Web服務(wù)端技術(shù)
第三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)
第四階段 Java互聯(lián)網(wǎng)架構(gòu)
職場(chǎng)華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實(shí)訓(xùn)項(xiàng)目
“愛(ài)逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)
培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)
Groovy 快速入門(mén)
>
Groovy是一門(mén)基于JVM的動(dòng)態(tài)語(yǔ)言,很多語(yǔ)法和java類似。大部分Java代碼也同時(shí)是合法的Groovy代碼。本文是快速入門(mén),所以針對(duì)語(yǔ)法并不會(huì)做非常詳細(xì)的介紹。如果需要詳細(xì)語(yǔ)法,請(qǐng)直接查看Groovy**方文檔。另外為了省事,本文中的大部分代碼例子直接引用了Groovy文檔。
基本內(nèi)容
注釋
單行注釋,以//
開(kāi)頭。
多行注釋,/* */
。
GroovyDoc注釋,和JavaDoc注釋類似。
/** * Creates a greeting method for a certain person. * * @param otherPerson the person to greet * @return a greeting message */Shebang注釋,和linux其他注釋類似,用于指定腳本解釋器的位置。
#!/usr/bin/env groovy標(biāo)識(shí)符
大體上,Groovy標(biāo)識(shí)符的命名規(guī)則和Java差不多。如果某個(gè)標(biāo)識(shí)符在Groovy中合法,在Java中不合法,我們可以使用單引號(hào)或雙引號(hào)將標(biāo)識(shí)符包括起來(lái)。
字符串
字符串可以使用單引號(hào)
或雙引號(hào)"
包括起來(lái)。
多行字符串可以使用三個(gè)連續(xù)的單引號(hào)或雙引號(hào)包括。不論是單行還是多行字符串, 都可以使用反斜杠轉(zhuǎn)義字符。
def multiline="""line1 line2 line3 """我們還可以將變量直接插入到字符串中,這叫做內(nèi)插字符串(String interpolation)。語(yǔ)法和EL表達(dá)式類似。編譯器會(huì)把美元和花括號(hào)中的內(nèi)容替換成實(shí)際的值,內(nèi)插字符串中還可以進(jìn)行表達(dá)式計(jì)算。
def name = Guillaume // a plain string def greeting = "Hello ${name}"當(dāng)內(nèi)插字符串可以由前后的符號(hào)區(qū)分出的時(shí)候,花括號(hào)可以省略。
def person = [name: Guillaume , age: 36] assert "$person.name is $person.age years old" == Guillaume is 36 years old當(dāng)使用內(nèi)插字符串的時(shí)候,字符串字面值是Groovy的字符串類型GString。這一點(diǎn)需要注意。普通的Java字符串是不變的,而GString是可變的。另外它們的哈希值也不同。因此在使用Map等數(shù)據(jù)類型的時(shí)候需要格外注意,避免使用GString作為Map的鍵。
字符
Groovy沒(méi)有字符字面量。如果需要向Java方法傳入單個(gè)字符的話,可以使用下面的方法進(jìn)行轉(zhuǎn)換。
def c2 = B as char assert c2 instanceof Character def c3 = (char) C assert c3 instanceof Character布爾類型
Groovy的布爾類型和Java類似,也有true
和false
兩個(gè)值。不過(guò)Groovy的布爾語(yǔ)義更豐富。未到結(jié)尾的迭代器、非空對(duì)象引用、非零數(shù)字都認(rèn)為是真;空集合、空字符串等認(rèn)為是假。詳情參見(jiàn)Groovy文檔 core-semantics#Groovy-Truth
數(shù)字類型
Groovy支持byte
、char
、short
、 int
、long
和 BigInteger
等幾種數(shù)字類型。如果使用普通方式聲明,它們和Java中的變量很相似。
如果使用def
關(guān)鍵字聲明,那么這些數(shù)字會(huì)自動(dòng)選擇可以容納它們的類型。
這些整數(shù)還可以添加0b
、0
和0x
前綴,分別代表8進(jìn)制數(shù),8進(jìn)制數(shù)和16進(jìn)制數(shù)。
另外Groovy還支持float
、double
和BigDecimal
三種浮點(diǎn)數(shù)類型。原理同上。還可以使用科學(xué)計(jì)數(shù)法1.123E10
這樣的形式代表浮點(diǎn)數(shù)。
Groovy的數(shù)字常量同樣支持后綴區(qū)分字面值類型,這幾種類型和Java中的類似。唯一不同的是Groovy還支持G
和g
后綴,代表BigInteger或BigDecimal類型,根據(jù)字面值是否含有小數(shù)點(diǎn)來(lái)區(qū)分。
數(shù)學(xué)計(jì)算
數(shù)字的計(jì)算結(jié)果和Java規(guī)則類似:小于int的整數(shù)類型會(huì)被提升為int類型,計(jì)算結(jié)果也是int類型;小于long的整數(shù)類型和long計(jì)算,結(jié)果是long類型;BigInteger和其它整數(shù)類型計(jì)算,結(jié)果是BigInteger類型;BigDecimal和其它整數(shù)類型計(jì)算,結(jié)果是BigDecimal類型;BigDecimal和float、double等類型計(jì)算,結(jié)果是double類型。
列表
Groovy中的列表比較靈活,有點(diǎn)像Python中的列表。使用[....]
語(yǔ)法可以聲明列表,默認(rèn)情況下列表是ArrayList實(shí)現(xiàn)。我們也可以使用as
運(yùn)算符自己選擇合適的列表底層類型。
有了列表之后,就可以使用它了。使用方法和Python差不多。我們使用[索引]
引用和修改列表元素。如果索引是負(fù)的,則從后往前計(jì)數(shù)。要在列表末尾添加元素,可以使用左移運(yùn)算符<<
。如果在方括號(hào)中指定了多個(gè)索引,會(huì)返回由這些索引對(duì)應(yīng)元素組成的新列表。使用兩個(gè)點(diǎn)加首位索引..
可以選擇一個(gè)子列表。
列表還可以組合成復(fù)合列表。
def multi = [[0, 1], [2, 3]] assert multi[1][0] == 2數(shù)組
聲明數(shù)組的方式和列表一樣,只不過(guò)需要顯示指定數(shù)組類型。數(shù)組的使用方法也和列表類似,只不過(guò)由于數(shù)組是不可變的,所以不能像數(shù)組末尾添加元素。
int[] intArray = [1, 2, 3, 4, 5] def intArray2 = [1, 2, 3, 4, 5, 6] as int[]Map
創(chuàng)建Map同樣使用方括號(hào),不過(guò)這次需要同時(shí)指定鍵和值了。Map創(chuàng)建好之后,我們可以使用[鍵]
或.鍵
來(lái)訪問(wèn)對(duì)應(yīng)的值。默認(rèn)情況下創(chuàng)建的Map是java.util.LinkedHashMap
,我們可以聲明變量類型或者使用as
關(guān)鍵字改變Map的實(shí)際類型。
關(guān)于Map有一點(diǎn)需要注意。如果將一個(gè)變量直接作為Map的鍵的話,其實(shí)Groovy會(huì)用該變量的名稱作為鍵,而不是實(shí)際的值。如果需要講變量的值作為鍵的話,需要在變量上添加小括號(hào)。
def key = name def person = [key: Guillaume ] //鍵是key而不是name assert !person.containsKey( name ) assert person.containsKey( key ) //這次才正確的將key變量的值作為Map的鍵 person = [(key): Guillaume ] assert person.containsKey( name ) assert !person.containsKey( key )運(yùn)算符
和Java類似的運(yùn)算符
Groovy的數(shù)學(xué)運(yùn)算符和Java類似,只不過(guò)多了一個(gè)乘方運(yùn)算**
和乘方賦值**=
。
Groovy的關(guān)系運(yùn)算符(大于、小于等于這些)和Java類似。
Groovy的邏輯運(yùn)算符(與或非這些)和Java類似,也支持短路計(jì)算。
Groovy的位運(yùn)算符合Java類似。
Groovy的三元運(yùn)算符條件?值1:值2
和Java類似。
可空運(yùn)算符
Groovy支持Elvis操作符,當(dāng)對(duì)象非空的時(shí)候結(jié)果是值1,為空時(shí)結(jié)果是值2?;蛘吒苯?,對(duì)象非空是使用對(duì)象本身,為空時(shí)給另一個(gè)值,常用于給定某個(gè)可空變量的默認(rèn)值。
displayName = user.name ? user.name : Anonymous displayName = user.name ?: Anonymous安全導(dǎo)航運(yùn)算符
當(dāng)調(diào)用一個(gè)對(duì)象上的方法或?qū)傩詴r(shí),如果該對(duì)象為空,就會(huì)拋出空指針異常。這時(shí)候可以使用?.
運(yùn)算符,當(dāng)對(duì)象為空時(shí)表達(dá)式的值也是空,不會(huì)拋出空指針異常。
字段訪問(wèn)運(yùn)算符
在Groovy中默認(rèn)情況下使用點(diǎn)運(yùn)算符.
會(huì)引用屬性的Getter或Setter。如果希望直接訪問(wèn)字段,需要使用.@
運(yùn)算符。
方法指針運(yùn)算符
我們可以將方法賦給變量,這需要使用.&
運(yùn)算符。然后我們就可以像調(diào)用方法那樣使用變量。方法引用的實(shí)際類型是Groovy的閉包Closure。這種運(yùn)算符可以將方法作為參數(shù),讓Groovy語(yǔ)言非常靈活。
展開(kāi)運(yùn)算符
展開(kāi)運(yùn)算符*.
會(huì)調(diào)用一個(gè)列表上所有元素的相應(yīng)方法或?qū)傩?,然后將結(jié)果再組合成一個(gè)列表。
展開(kāi)運(yùn)算符是空值安全的,如果遇到了null值,不會(huì)拋出空指針異常,而是返回空值。
cars = [ new Car(make: Peugeot , model: 508 ), null, new Car(make: Renault , model: Clio )] assert cars*.make == [ Peugeot , null, Renault ] assert null*.make == null展開(kāi)運(yùn)算符還可以用于展開(kāi)方法參數(shù)、列表和Map。
范圍運(yùn)算符
使用..
創(chuàng)建范圍。默認(rèn)情況下范圍是閉區(qū)間,如果需要開(kāi)閉區(qū)間可以在結(jié)束范圍上添加<
符號(hào)。范圍的類型是groovy.lang.Range
,它繼承了List
接口,也就是說(shuō)我們可以將范圍當(dāng)做List使用。
比較運(yùn)算符
<=>
運(yùn)算符相當(dāng)于調(diào)用compareTo方法。
成員運(yùn)算符
成員運(yùn)算符in
相當(dāng)于調(diào)用contains或isCase方法。
相等運(yùn)算符
==
運(yùn)算符和Java中的不同。在Groovy中它相當(dāng)于調(diào)用equals
方法。如果需要比較引用,使用is
。
轉(zhuǎn)換運(yùn)算符
我們可以使用Java形式的(String) i
來(lái)轉(zhuǎn)換類型。但是假如類型不匹配的話,就會(huì)拋出ClassCastException
。而使用as
運(yùn)算符就會(huì)避免這種情況。
如果希望自己的類也支持as
運(yùn)算符的話,需要實(shí)現(xiàn)asType
方法。
表達(dá)式和語(yǔ)句
聲明變量
Groovy支持以傳統(tǒng)方式使用變量類型 變量名
的方式聲明變量,也可以使用def
關(guān)鍵字聲明變量。使用def
關(guān)鍵字的時(shí)候,變量類型由編譯器自動(dòng)推斷,無(wú)法推斷時(shí)就是Object
類型。
Groovy可以同時(shí)聲明多個(gè)變量。
def (a, b, c) = [10, 20, foo ]如果左邊的變量數(shù)比右面的值多,那么剩余的變量就是null。
def (a, b, c) = [1, 2] assert a == 1 && b == 2 && c == null如果等號(hào)右面比左面多,那么多余的值會(huì)被忽略。
def (a, b) = [1, 2, 3] assert a == 1 && b == 2自定義對(duì)象也可以用多重賦值進(jìn)行對(duì)象解構(gòu)。該對(duì)象必須有g(shù)etAt方法。
class CustomDestruction { int a int b int c //解構(gòu)需要實(shí)現(xiàn)getAt方法 def getAt(int i) { switch (i) { case 0: a; break case 1: b; break case 2: c; break default: throw new IllegalArgumentException() } } static void main(String[] args) { //對(duì)象解構(gòu) def obj = new CustomDestruction(a: 3, b: 4, c: 5) def (x, y, z) = obj PRintln("x=$x,y=$y,z=$z") } }條件語(yǔ)句
Groovy的if語(yǔ)句和Java的類似。不過(guò)在Groovy中布爾值的真假不僅看條件比較的結(jié)果,還可以以其他情況判斷。前面已經(jīng)介紹過(guò)了。switch語(yǔ)句同理,真值判斷非常自由。詳情可參見(jiàn)Groovy文檔 真值判斷。
循環(huán)語(yǔ)句
Groovy支持傳統(tǒng)的Java的for(int i=0;i<N;i )
和for(int i :array)
兩種形式。另外還支持for in loop形式,支持迭代范圍、列表、Map、數(shù)組等多種形式的集合。
while語(yǔ)句的形式和Java相同。
斷言語(yǔ)句
前面我們看到了很多Groovy斷言的例子。Groovy斷言語(yǔ)句的功能很強(qiáng)大,以至于文檔中寫(xiě)的是強(qiáng)力斷言(Power assertion)。
Groovy斷言的形式如下。Groovy斷言和Java斷言完全不同。Groovy斷言是一項(xiàng)語(yǔ)言功能,一直處于開(kāi)啟狀態(tài),和JVM的斷言功能-ea
完全無(wú)關(guān)。所以它是我們進(jìn)行單元測(cè)試的首選方式。
比如我們要斷言1 1=3。結(jié)果應(yīng)該類似這樣。越復(fù)雜的表達(dá)式,斷言效果越清晰。有興趣的同學(xué)可以試試。
Caught: Assertion failed: assert 1 1 == 3 | | 2 false構(gòu)造器
Groovy的構(gòu)造器非常靈活,我們可以使用傳統(tǒng)的Java方式聲明和使用構(gòu)造器,也可以完全不聲明構(gòu)造器。有時(shí)候不聲明反而更簡(jiǎn)單。如果沒(méi)有聲明構(gòu)造器的話,我們可以在構(gòu)造對(duì)象的時(shí)候使用命名參數(shù)方式傳遞參數(shù),這種方式非常方便,因?yàn)槲覀儾恍枰暶魉袇?shù),只要聲明所需的參數(shù)即可。
如果希望對(duì)構(gòu)造器進(jìn)行限制,可以手動(dòng)聲明構(gòu)造器,這樣這種自動(dòng)構(gòu)造就不會(huì)進(jìn)行了。
class Product { String name double price String toString() { return "Product(name:$name,price:$price)" } static void main(String[] args) { def product = new Product(name: AMD Ryzen 1700 , price: 2499) println("隱式構(gòu)造器:$product") } }方法
Groovy方法和Java方法基本相同。不過(guò)Groovy方法更方便:支持命名參數(shù)和默認(rèn)參數(shù)。另外Groovy方法可以使用def
關(guān)鍵字聲明,這時(shí)候方法返回類型是Object。在Groovy中方法的返回語(yǔ)句可以省略,這時(shí)候編譯器會(huì)使用方法的**后一個(gè)語(yǔ)句的值作為返回值。在前面我們還看到了def
關(guān)鍵字定義變量,這時(shí)候變量的類型需要從代碼中推斷。
在使用命名參數(shù)的時(shí)候需要注意一點(diǎn),方法參數(shù)需要聲明為Map類型(不需要詳細(xì)指定鍵和值的類型),在調(diào)用方法的時(shí)候使用命名參數(shù)方式傳入?yún)?shù)。
def foo(Map args) { "${args.name}: ${args.age}" } //調(diào)用方法 foo(name: Marie , age: 1)另外方法的括號(hào)是可選的,我們可以省略括號(hào)直接像這樣調(diào)用方法。
methodWithDefaultParam 555 , 42字段
Groovy中字段和Java中的概念類似。不過(guò)Groovy更加方便:默認(rèn)情況下字段是私有的,Groovy自動(dòng)生成字段的Getter和Setter。如果需要更精細(xì)的控制,把它當(dāng)成Java字段用就行了。不過(guò)如果自定義字段的話,Groovy不會(huì)自動(dòng)生成對(duì)應(yīng)的屬性了。
屬性
如果字段上面沒(méi)有聲明訪問(wèn)修飾符(private、public這些),Groovy就會(huì)自動(dòng)生成Gettter和Setter。如果字段是final
的,那么只會(huì)生成Getter。這就是Groovy方便的屬性功能。
當(dāng)然Groovy的方便不止于此,我們的所有類似Java訪問(wèn)字段的語(yǔ)法,實(shí)際上都會(huì)調(diào)用字段對(duì)應(yīng)的Getter和Setter。這樣顯著減少了代碼量。如果在類內(nèi)部的話,.字段
語(yǔ)法會(huì)直接訪問(wèn)字段,這樣做是為了防止無(wú)限遞歸調(diào)用屬性。
下面的例子中,**次調(diào)用p.name = Marge
如果在類內(nèi)部,就直接寫(xiě)入字段,如果調(diào)用在類外部,就會(huì)使用Setter寫(xiě)入。第二次調(diào)用使用了方法語(yǔ)法,直接使用Setter寫(xiě)入,所以不管在類內(nèi)還是類外,寫(xiě)入的值都是"Wonder$name"
。
特征類
Groovy和Scala一樣,支持特征類(trait)。特征類就好像自帶實(shí)現(xiàn)的接口。在Java中只能繼承一個(gè)類和多個(gè)接口。在Groovy中,我們可以繼承多個(gè)特征類。特征類和普通的Groovy類一樣,可以包括屬性、字段、方法等,特征類也可以是抽象的。
使用特征類,我們可以在Groovy中實(shí)現(xiàn)類似C 的多重繼承。另外,特征類支持運(yùn)行時(shí)動(dòng)態(tài)綁定,在某些情況下非常有用。
trait Readable { void read() { println("read...") } } trait Writable { void write(String text) { println("write $text") } } class Notebook implements Readable, Writable { static void main(String[] args) { //使用特性類 def notebook = new Notebook() notebook.read() notebook.write("something") } }閉包
閉包是Groovy非常重要的一個(gè)功能,也是我們介紹的**后一個(gè)功能。要了解閉包,**好先知道Java的Lambda表達(dá)式、匿名內(nèi)部類等概念。Groovy閉包和Lambda表達(dá)式概念相近,但是功能更強(qiáng)大。
聲明閉包
閉包的形式如下。
{ [closureParameters -> ] statements }
以下都是合法的Groovy閉包。所有閉包都是groovy.lang.Closure
類型的實(shí)例。閉包的參數(shù)類型是可選的。如果閉包只有單個(gè)參數(shù),參數(shù)名也是可選的。Groovy會(huì)隱式指定it
作為參數(shù)名。Kotlin語(yǔ)言也是類似的做法,有助于我們先出可讀性很好的閉包。
調(diào)用閉包
閉包既可以當(dāng)做方法來(lái)調(diào)用,也可以顯示調(diào)用call方法。
def code = { 123 } assert code() == 123 assert code.call() == 123調(diào)用有參數(shù)的閉包也是類似的。
def isOdd = { int i-> i%2 == 1 } assert isOdd(3) == true assert isOdd.call(2) == false使用閉包
Groovy閉包類似Java的Lambda表達(dá)式和匿名內(nèi)部類,不過(guò)使用更方便,能讓我們減少不少代碼量。閉包還可以作為方法參數(shù)傳遞到其他地方,這讓閉包更加靈活。
static void funWithClosure(Closure closure) { closure() } //在其他地方調(diào)用該方法 funWithClosure({ println("Hello yitian") }) //括號(hào)還可以省略,更加簡(jiǎn)練 funWithClosure { println("Hello yitian") }關(guān)于閉包,還有幾個(gè)精彩的例子,就是Gradle腳本和Groovy模板引擎,它們都利用了Groovy強(qiáng)大的閉包功能,構(gòu)建出簡(jiǎn)練而強(qiáng)大的DSL,讓我們用很少的代碼就可以實(shí)現(xiàn)強(qiáng)大的功能(雖然學(xué)起來(lái)稍微復(fù)雜點(diǎn))。
參考資料
Groovy**方文檔 語(yǔ)法
相關(guān)推薦:
南京java培訓(xùn) 南京java培訓(xùn)班 南京java培訓(xùn)機(jī)構(gòu)
體驗(yàn)課預(yù)約試聽(tīng)
倒計(jì)時(shí)
課程熱線:
客服在線時(shí)間:早上9點(diǎn)~下午6點(diǎn),其他時(shí)間請(qǐng)?jiān)诰€預(yù)約報(bào)名或留言,謝謝!
免費(fèi)體驗(yàn)課開(kāi)班倒計(jì)時(shí)
稍后會(huì)有專業(yè)老師給您回電,請(qǐng)保持電話暢通
熱門(mén)課程
機(jī)構(gòu)資訊
- 太倉(cāng)java開(kāi)發(fā)培訓(xùn)費(fèi)用_太倉(cāng)JAVA培訓(xùn)
- 昆山哪里有Java實(shí)戰(zhàn)培訓(xùn)學(xué)校_昆山JAVA培訓(xùn)
- 常熟學(xué)Java哪個(gè)好_常熟JAVA培訓(xùn)
- 蘇州Java培訓(xùn)課程哪個(gè)好_蘇州JAVA培訓(xùn)
- 昆山哪里有Java語(yǔ)言培訓(xùn)學(xué)院_昆山JAVA培訓(xùn)
- 昆山Java工程師培訓(xùn)機(jī)構(gòu)哪個(gè)好_昆山JAVA培訓(xùn)
- 常熟學(xué)習(xí)Java工程師哪里好_常熟JAVA培訓(xùn)
- 昆山Java編程課程價(jià)格_昆山JAVA培訓(xùn)
- 張家港Java開(kāi)發(fā)培訓(xùn)班學(xué)費(fèi)_張家港JAVA培訓(xùn)
- 太倉(cāng)Java工程師培訓(xùn)學(xué)院哪里好_太倉(cāng)JAVA培訓(xùn)