atitit groovy 總結java 提高效率

atitit groovy 總結java 提高效率 java

 

#---環境配置 1程序員

#------安裝麻煩的 2正則表達式

3、建立groovy項目 2api

3、  添加 Groovy  2數組

4、  編譯運行groovy 3閉包

Groovy斷點調試不生效的解決 4app

Groovy實現運行原理 5eclipse

1. Groovy腳本的運行.. 5jvm

2. Groovy類的運行.. 5socket

Groovy語法優勢: 6

3. 動態類型def 6

4. 循環變量不須要def 6

5. String 和Gstring 6

6. 範圍 6

7. 默認參數值 7

8. 集合簡化操做 7

9. 閉包(Closure) 8

10. Groovymap構造函數 9

11. (5)    不須要return 9

12. (6)    不須要()號 9

13. ?運算符 避免出現空指針異常, 10

14. 動態添加方法metaClass 10

15. 正則表達式常量在Java中沒有,在Groovy中表示爲 /pattern/ 11

16. 不強制捕獲檢查異常(checked exception)外 (這跟C#很像,若是我沒記錯的話 :)         而且在方法聲明時,也能夠不寫throws語句。 11

17. .Groovy會自動導入java.lang.*, java.util.*, java.net.*, java.io.*, java.math.BigInteger, java.math.BigDecimal,   groovy.lang.*, groovy.util.*,而Java則只自動導入java.lang.* 11

Groovyjava的不兼容性 11

Groovy的缺點..基於java/jvm 12

參考 12

 

做者 老哇的爪子 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.3For 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...

 

 

 

3、建立groovy項目

 

1、  新建一個groovy項目

 

New --> Project à Java Project 建立一個java項目。爲了方便管理,建議在source中建兩個source文件夾javagroovy,分別用於存儲java源文件和groovy源文件:

 

 

3、  添加 Groovy 

 

在項目groovy源文件下右鍵,New >>>Groovy Class,,生成/grv1/src/pkg1/g1.groovy

 

package pkg1

import com.attilax.core

 

import static  com.attilax.core.*;

/**

 * @author  attilax 老哇的爪子

 *@since  2014525日 下午1:22:02$

 */

class g1 {

 

/**

@author attilax 老哇的爪子

@since  2014525日 下午1:22:02$

 * @param args

 */

public static void main(String[] args) {

// attilax 老哇的爪子  下午1:22:02   2014525日 

println ("---2")

def $a="hello world"

println $a

}

//  attilax 老哇的爪子 下午1:22:02   2014525日   

}

 

 

4、  編譯運行groovy

 

在源文件上右鍵,Compile Groovy File,而後右鍵,

Run As groovy script /  java appliacation 效果同樣

Run As à Groovy  console,走打開了groovy的控制檯程序gui, 是個mini ide,能夠edit/run  groovy script

 

 

 

 

Groovy斷點調試不生效的解決

添加 package定義....貝兒不生效.

 

package pkg1

println "ac" 

println "ac2"

Groovy實現運行原理

1. Groovy腳本的運行.. 

· // 對於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"

 

2. Groovy類的運行..

class g5 {

//  attilax 老哇的爪子 下午2:53:50   2014年5月25日   

// 靜態的main方法做爲程序入口

static main(args) {

  

// 使用println命令輸出

println "HelloWorld in class"

}

 

}

Groovy語法優勢:

3. 動態類型def 

實際上Groovy同時支持強類型變量和「弱」類型變量,強類型變量擁有本身的類型,而「弱」類型變量則所有會被編譯爲Object類型,從代碼的角度上,Groovy的變量無需聲明類型了:

4.  循環變量不須要def

for(i = 0; i < 5; i++){

  println val

 }

 for(i in 0..5)

 

5. String 和Gstring

除了標準的java.lang.String之外(用’號括住),groovy還支持Gstring字符串類型(用「號括住)。把上面的for循環中的語句改爲:

  println "This is ${i}:${val}"

運行一下,你就會明白什麼是Gstring

6. 範圍

這個跟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循環中使用。

7. 默認參數值

能夠爲方法指定默認參數值。咱們修改repeat方法的定義:

def repeat(val,repeat=3){

 for(i in 0..<repeat){

  println "This is ${i}:${val}"

 }

}

能夠看到,repeat方法增長了一個參數repeat(而且給了一個默認值3),用於指定循環次數。

當咱們不指定第2個參數調用repeat方法時,repeat參數取默認值3。

8. 集合簡化操做

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做爲成員名索引

 

 

 

9.       閉包(Closure)

閉包是用{符號括起來的代碼塊,它能夠被單獨運行或調用,也能夠被命名。相似‘匿名類’或內聯函數的概念。

閉包中最多見的應用是對集合進行迭代,下面定義了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!

 

10. Groovymap構造函數

不在須要程序員聲明任何構造函數,由於groovy自動提供了足夠你使用的構造函數。不用擔憂構造函數不夠多,由於實際上只須要兩個構造函數(1個不帶參數的默認構造函數,1個只帶一個map參數的構造函數—因爲是map類型,經過這個參數你能夠在構造對象時任意初始化它的成員變量)。

 

11. (5)    不須要return

Groovy中,方法不須要return來返回值嗎?這個彷佛很難理解。看後面的代碼吧。

所以,groovy風格的類是這樣的:

12. (6)    不須要()號

Groovy中方法調用能夠省略()號(構造函數除外),也就是說下面兩句是等同的:

 

person1.setName 'kk'

person1.setName('kk')

 

13.   ?運算符 避免出現空指針異常,

在java中,有時候爲了不出現空指針異常,咱們一般須要這樣的技巧:

if(rs!=null){

rs.next()

… …

}

在groovy中,可使用?操做符達到一樣的目的:

rs?.next()

?在這裏是一個條件運算符,若是?前面的對象非null,執行後面的方法,不然什麼也不作。

14.  動態添加方法metaClass

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()

}

15. 正則表達式常量在Java中沒有,在Groovy中表示爲 /pattern/ 

16. 不強制捕獲檢查異常(checked exception)外 (這跟C#很像,若是我沒記錯的話 :)         而且在方法聲明時,也能夠不寫throws語句。

17. .Groovy會自動導入java.lang.*, java.util.*, java.net.*, java.io.*, java.math.BigInteger, java.math.BigDecimal,   groovy.lang.*, groovy.util.*,而Java則只自動導入java.lang.*

Groovyjava的不兼容性

一開始,走有groovy的不兼容性  {} 大的括號不支持

不過中間走ok.

def s=""

 {}

println "a"

Groovy的缺點..基於java/jvm

總結:

Groovy仍是僅僅語言層次提高了效率.工具沒方法...提高效率是有的,大概雅要有個20%..仍是比較好的..

參考

Groovy入門教程 - kmyhy的專欄 博客頻道 - CSDN.NET.htm

Groovy無痛AOP之旅.htm

Groovy探索之MOP 十四 對Java類使用Groovy語言的MOP - 軟件的信雅達 博客頻道 - CSDN.NET.htm

相關文章
相關標籤/搜索