atitit groovy 總結java 提高效率 java
#---環境配置 1程序員
#------安裝麻煩的 2正則表達式
Groovy實現運行原理 5eclipse
2. Groovy類的運行.. 5socket
15. 正則表達式常量在Java中沒有,在Groovy中表示爲 /pattern/ 11
16. 不強制捕獲檢查異常(checked exception)外 (這跟C#很像,若是我沒記錯的話 :) 而且在方法聲明時,也能夠不寫throws語句。 11
做者 老哇的爪子 Attilax 艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://blog.csdn.net/attilax
1.groovy eclipse 插件_groovy eclipse下載 2.9 - 新雲軟件下載.htm
roovy Eclipse Plugin(插件)是script語言Groovy的開發輔助工具,它提供編輯,編譯,以及執行groovy腳本的功能。支持Eclipse 3.2以及以上的版本。本站提供的是官網最新版支持groovy eclipse 4.3【For Eclipse 4.3 (Kepler)】
已經帶了 Groovy2.1 sdk ...不用單個的安裝groovy runtime...也不用設置什麼環境變量..
2.Eclipse 4.3 (Kepler)
使用maket update 三不行..
roovy網站只有plugin update url,仍是不行...
只好下載離線pakage從軟件站點.. 78M.尺寸不小的
使用archi安裝仍是不行...
只好使用F:\eclipse\dropins料得個直黑頭才..ok...
1、 新建一個groovy項目
New --> Project à Java Project 建立一個java項目。爲了方便管理,建議在source中建兩個source文件夾java和groovy,分別用於存儲java源文件和groovy源文件:
在項目groovy源文件下右鍵,New >>>Groovy Class,,生成/grv1/src/pkg1/g1.groovy
package pkg1
import com.attilax.core
import static com.attilax.core.*;
/**
* @author attilax 老哇的爪子
*@since 2014年5月25日 下午1:22:02$
*/
class g1 {
/**
@author attilax 老哇的爪子
@since 2014年5月25日 下午1:22:02$
* @param args
*/
public static void main(String[] args) {
// attilax 老哇的爪子 下午1:22:02 2014年5月25日
println ("---2")
def $a="hello world"
println $a
}
// attilax 老哇的爪子 下午1:22:02 2014年5月25日
}
在源文件上右鍵,Compile Groovy File,而後右鍵,
Run As groovy script / java appliacation 效果同樣
Run As à Groovy console,走打開了groovy的控制檯程序gui, 是個mini ide,能夠edit/run groovy script
添加 package定義....貝兒不生效.
package pkg1
println "ac"
println "ac2"
· // 對於groovy程序來講,能夠沒有類和main方法,直接書寫的代碼就能夠運行
實際上,最終編譯器仍會爲這段代碼生成一個類,類名和文件名相同,只不過從源碼的角度上,確實不用寫類或者main方法了,這一點很像Javascript等其它腳本語言。
println "ac"
println "ac2"
"F:\jre7\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:1723 -Dgroovy.home=/F:/eclipse/plugins/org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE/ -Dfile.encoding=GBK -classpath "D:\workSpace\grv1\bin;F:\eclipse\plugins\org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE\lib\groovy-all-2.1.5.jar;F:\eclipse\plugins\org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE\lib\bsf-2.4.0.jar;F:\eclipse\plugins\org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE\lib\ivy-2.2.0.jar;F:\eclipse\plugins\org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE\lib\servlet-api-2.4.jar;C:\Documents and Settings\Administrator\.groovy\greclipse\global_dsld_support;F:\eclipse\plugins\org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE\plugin_dsld_support\\" org.codehaus.groovy.tools.GroovyStarter --classpath "D:\workSpace\grv1\src;D:\workSpace\grv1\bin" --main groovy.ui.GroovyMain "D:\workSpace\grv1\src\pkg1\g3.groovy"
class g5 {
// attilax 老哇的爪子 下午2:53:50 2014年5月25日
// 靜態的main方法做爲程序入口
static main(args) {
// 使用println命令輸出
println "HelloWorld in class"
}
}
實際上Groovy同時支持強類型變量和「弱」類型變量,強類型變量擁有本身的類型,而「弱」類型變量則所有會被編譯爲Object類型,從代碼的角度上,Groovy的變量無需聲明類型了:
for(i = 0; i < 5; i++){
println val
}
for(i in 0..5)
除了標準的java.lang.String之外(用’號括住),groovy還支持Gstring字符串類型(用「號括住)。把上面的for循環中的語句改爲:
println "This is ${i}:${val}"
運行一下,你就會明白什麼是Gstring。
這個跟pascal中的「子界」是同樣的。在前面的for循環介紹中咱們已經使用過的for(i in 0..5)這樣的用法,其中的0..5就是一個範圍。
範圍 是一系列的值。例如 「0..4」 代表包含 整數0、一、二、三、4。Groovy 還支持排除範圍,「0..<4」 表示0、一、二、3。還能夠建立字符範圍:「a..e」 至關於a、b、c、d、e。「a..<e」 包括小於e 的全部值。
範圍主要在for循環中使用。
能夠爲方法指定默認參數值。咱們修改repeat方法的定義:
def repeat(val,repeat=3){
for(i in 0..<repeat){
println "This is ${i}:${val}"
}
}
能夠看到,repeat方法增長了一個參數repeat(而且給了一個默認值3),用於指定循環次數。
當咱們不指定第2個參數調用repeat方法時,repeat參數取默認值3。
Groovy支持最多見的兩個java集合:java.util.Collection和java.util.Map。前面所說的範圍實際也是集合的一種(java.util.List)。
(1) Collection
Groovy 中這樣來定義一個Collection:
def collect=["a","b","c"]
除了聲明時往集合中添加元素外,還能夠用如下方式向集合中添加元素:
collect.add(1);
collect<<"come on";
collect[collect.size()]=100.0
Collection使用相似數組下標的方式進行檢索:
println collect[collect.size()-1]
println collect[5]
groovy支持負索引:
println collect[-1]//索引其倒數第1個元素
println collect[-2] //索引其倒數第2個元素
Collection支持集合運算:
collect=collect+5//在集合中添加元素5
println collect[collect.size()-1]
collect=collect-'a'//在集合中減去元素a(第1個)
println collect[0]//如今第1個元素變成b了
一樣地,你能夠往集合中添加另外一個集合或刪除一個集合:
collect=collect-collect[0..4]//把集合中的前5個元素去掉
println collect[0]//如今集合中僅有一個元素,即原來的最後一個元素
println collect[-1]//也能夠用負索引,證實最後一個元素就是第一個元素
(2) Map
Map是「鍵-值」對的集合,在groovy中,鍵不必定是String,能夠是任何對象(實際上Groovy中的Map就是java.util.Linke dHashMap)。
如此能夠定義一個Map:
def map=['name':'john','age':14,'sex':'boy']
添加項:
map=map+['weight':25]//添加john的體重
map.put('length',1.27)//添加john的身高
map.father='Keller'//添加john的父親
能夠用兩種方式檢索值:
println map['father']//經過key做爲下標索引
println map.length//經過key做爲成員名索引
閉包是用{符號括起來的代碼塊,它能夠被單獨運行或調用,也能夠被命名。相似‘匿名類’或內聯函數的概念。
閉包中最多見的應用是對集合進行迭代,下面定義了3個閉包對map進行了迭代:
map.each({key,value->//key,value兩個參數用於接受每一個元素的鍵/值
println "$key:$value"})
map.each{println it}//it是一個關鍵字,表明map集合的每一個元素
map.each({ println it.getKey()+"-->"+it.getValue()})
除了用於迭代以外,閉包也能夠單獨定義:
def say={word->
println "Hi,$word!"
}
調用:
say('groovy')
say.call('groovy&grails')
輸出:
Hi,groovy!
Hi,groovy&grails!
不在須要程序員聲明任何構造函數,由於groovy自動提供了足夠你使用的構造函數。不用擔憂構造函數不夠多,由於實際上只須要兩個構造函數(1個不帶參數的默認構造函數,1個只帶一個map參數的構造函數—因爲是map類型,經過這個參數你能夠在構造對象時任意初始化它的成員變量)。
Groovy中,方法不須要return來返回值嗎?這個彷佛很難理解。看後面的代碼吧。
所以,groovy風格的類是這樣的:
Groovy中方法調用能夠省略()號(構造函數除外),也就是說下面兩句是等同的:
person1.setName 'kk'
person1.setName('kk')
在java中,有時候爲了不出現空指針異常,咱們一般須要這樣的技巧:
if(rs!=null){
rs.next()
… …
}
在groovy中,可使用?操做符達到一樣的目的:
rs?.next()
?在這裏是一個條件運算符,若是?前面的對象非null,執行後面的方法,不然什麼也不作。
Groovy全部的對象都有一個元類metaClass,咱們能夠經過metaClass屬性訪問該元類。經過元類,能夠爲這個對象增長方法(在java中不可想象)!見下面的代碼,msg是一個String,經過元類,咱們爲msg增長了一個String 類中所沒有的方法up:
def msg = "Hello!"
println msg.metaClass
String.metaClass.up = { delegate.toUpperCase() }
println msg.up()
經過元類,咱們還能夠檢索對象所擁有的方法和屬性(就象反射):
msg.metaClass.methods.each { println it.name }
msg.metaClass.properties.each { println it.name }
甚至咱們能夠看到咱們剛纔添加的up方法。
咱們能夠經過元類判斷有沒有一個叫up的方法,而後再調用它:
if (msg.metaClass.respondsTo(msg, 'up')) {
println msg.toUpperCase()
}
固然,也能夠推斷它有沒有一個叫bytes的屬性:
if (msg.metaClass.hasProperty(msg, 'bytes')) {
println msg.bytes.encodeBase64()
}
一開始,走有groovy的不兼容性 {} 大的括號不支持
不過中間走ok了.
def s=""
{}
println "a"
Groovy仍是僅僅語言層次提高了效率.工具沒方法...提高效率是有的,大概雅要有個20%吧..仍是比較好的..
Groovy入門教程 - kmyhy的專欄 - 博客頻道 - CSDN.NET.htm
Groovy無痛AOP之旅.htm
Groovy探索之MOP 十四 對Java類使用Groovy語言的MOP - 軟件的信雅達 - 博客頻道 - CSDN.NET.htm