Groovy的簡單入門
分享的僅是 Groovy 皮毛瓮增,大神勿噴窿给!
參考信息:
簡介
Groovy是運行在JVM上的編程語言,說是一種運行在jvm中的動態(tài)語言妹蔽,Groovy可以與Java無縫銜接互相調(diào)用晶伦,因為groovy編譯出來的也是Java字節(jié)碼;
Groovy也是一種腳本語言律罢;
腳本語言目標是將應(yīng)用程序連接起來實現(xiàn)一些繁瑣、變動頻繁的細節(jié)棍丐;如:copy文件误辑、打包等等沧踏;用少量的代碼,實現(xiàn)相當強大的功能巾钉;
Groovy的應(yīng)用之: Gradle
這個構(gòu)建工具就是基于Groovy來編寫而成的翘狱,引入第三方庫更為簡潔;
開發(fā)環(huán)境的搭建
以為為Windows平臺
- 當然是JDK的配置砰苍;
- 下載Groovy sdk盒蟆,地址為:groovy sdk;下載好了师骗,直接解壓历等;
- 配置Groovy的環(huán)境變量; 建立
GROOVY_HOME
辟癌,值為上解壓目錄寒屯;
編輯Path追加%GROOVY_HOME%\bin
- 驗證:在命令行輸入:
groovy -v
提示OK,表示環(huán)境成功了黍少;
Hello world的編寫
命令行輸入:groovyconsole
可進入Groovy自帶的編寫器寡夹,來體驗一把!
如下:
當然了厂置,我們肯定要使用 idea 這個東東菩掏;
略!
基礎(chǔ)語法
1. 變量 OR 方法定義
使用 def
來定義變量,或者方法, 變量的定義不需要具體的類型昵济;groovy的語句結(jié)束智绸,不需要添加分號;程序根據(jù)上下文自動判斷類型(真正的多態(tài))访忿;
如下:
def a = 'hello'
println(a)
def fun(c) { // c 為動態(tài)類型
println(c)
}
// 創(chuàng)建對象:
def obj = new Object() // 跟java類似
2.方法返回值
groovy 方法的最后一行即為方法的返回值瞧栗,可省略掉return 語句;
@Test
void testFunc() {
println(groovyFunc(1,2)) // 輸出 1 2
}
def groovyFunc(arg1, arg2) {
println arg1
println arg2
arg1 + " " + arg2 // 最后一行是返回值
}
3.運算符重載
http://www.reibang.com/p/d3eb904406bc
Groovy MetaClass
參考:http://www.blogjava.net/johnnyjian/archive/2010/03/19/315962.html
Metaclass就是Class的Class海铆,Class定義了該類實例的行為迹恐,Metaclass則定義了該類及其實例的行為(http://en.wikipedia.org/wiki/Metaclass))。Groovy通過Metaclass使程序可以在運行時修改/添加類的方法卧斟、屬性等(動態(tài)性)殴边。
在Groovy中,每個Class都有一個對應(yīng)的Metaclass珍语,通過這個Metaclass可以給這個Class添加方法或?qū)傩裕?/p>
示例:為String類添加新方法
String.metaClass.capitalize = { delegate[0].toUpperCase() + delegate[1..-1] }
println("very".capitalize()) // 首字母大寫
Groovy 列表锤岸、映射和范圍
這是Groovy最常用的了;
鏈接:http://www.reibang.com/p/4f5facc8d384
Groovy 閉包
http://www.reibang.com/p/637e4d4b65a1
應(yīng)用場景:DSL(這個非常重要)廊酣;
XML 處理
http://www.reibang.com/p/695507fcc24d
腳本特性
直接運行g(shù)roovy腳本 (格式:groovy 文件全路徑
):
groovy在內(nèi)存中編譯代碼并執(zhí)行能耻;
當然也可以先編譯成class赏枚,通過 java 命令再運行
import java.io.*
println("Hello Groovy!")
println(new Date())
println("start copy ....")
def input = new File("C:/album_demo.mp4").newDataInputStream()
def output = new File("D:/1.mp4").newDataOutputStream()
output << input
input.close()
output.close()
println("end copy")