Grovvy初識

1.Groovy和Java對比

Groovy的松散的語法允許省略分號和修飾符
除非另行指定,Grovvy的所有內容都為public
Grovvy允許定義簡單腳本,同時無需定義正規的class對象
Grovvy在普通的常用java對象上增加了一些獨特的方法和快捷方式,使得他們更容易使用
Grovvy語法還允許省略變量類型
關于閉包:可以將閉包想象成為一個代碼塊,可以現在定義,以后再執行。可以使用這些強大的構造做許多漂亮的事情,不過最著名的是簡化迭代。使用Grovvy之后,就有可能也不再需要編寫Iterator實例了。
動態的mGroovy:從技術山講,Grovvy可能是您最近通水的類型最松散的動態語言之一。從這個角度講,Groovy有java的區別很大,java語言是一種固定的類型語言。在Groovy中類型是可選的。所以不必輸入String myStr="Hello",來聲明String變量。可以直接使用def進行不指定類型定義,類似于java中的var.
與java交互:用Grovvy編寫的任何內容都可以編譯成標準的java淚文件并在java代碼中重用。類似地,用標準的java代碼編寫的內容也是可以在Grovvy中重用。

2.用實例演示Java和Grovvy的區別

用java編寫的Hello World
public ?class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
編譯和運行Java示例
編譯 c:>javac HelloWorld.java
執行 c:>java HelloWorld
用Grovvy編寫的Hello World?
Grovvy支持松散的java語法,例如,不需要為打印Hello World這樣的簡單操作定義類
而且,Grovvy使日常的編碼活動變得更容易。例如,Grovvy允許駛入peinrln,而無須輸入System.out.println。。當輸入println時,Grovvy會非常聰明的知道您的System.out
所以用Grovvy編寫Hello World的程序就上如下:
println "Hello World"

請注意,在這段代碼周圍沒有類結構,而且也沒有方法結構!我還使用?println?代替了?System.out.println

運行Grovvy示例:
假設文件為

/home/amosli/developsoft/language/groovy/test/Hello.groovy

?

如果已經設置了Grovvy的環境變量,那么只需輸入:

更快捷的方式:

如果有環境變量就變成了:

?

這會有相同的結果,而且甚至無須定義任何文件。

3Grovvy是沒有類型的java代碼

類型定義:

為什么要有類型定義:在java中,如果要聲明一個String變量,則必須輸入:

String value="Hello world";

?

但是,如果仔細想想,就會看出,等號右側的字符已經表明?value?的類型是?String。所以,Groovy 允許省略?value?前面的?String?類型變量,并用?def?代替。

?def value="hello world"

?

實際上,Grovvy會根據對象的值來判斷他的類型。

運行程序!

將HelloWorld.grovvy文件中的代碼編輯成下面這樣

?

4.通過Grovvy進行循環

方式1:

這里可以定義i為int或者def,或者不定義其類型

方式2:

使用in進行循環,其中..表示“到”,0..5表示0到5.類似于0<=5;這里循環6次。

可以使用0..<5進行限定。類似于0<5循環5次。

5.Grovvy中的集合

1)Grovvy中的list

注意:assert命令用來證明范圍是java.util.List的實例,接著運行這個代碼,。證實該范圍是類型List的集合。

Grovvy的語法:

coll看起來很像一個java語言中的數組,實際上他是一個Collection。要在普通的java代碼中得到集合的相同實例,必須執行以下操作。

在java黛娜中,必須使用add()向ArrayList實例添加項。

而Grovvy中則提供了三種方法:

?

查找元素:

Grovvy中的特殊方法:

Grovvy中的特殊方法:

?

join()和count()只是在任何項List都可以調用的眾多方法中的兩個,分布操作符是個提別方便的工具,使用這個工具不要再集合上迭代,就能夠調用集合每個項上的方法。

假設有一個String列表,現在想將列表中的項目全部變成大寫,可以編寫以下代碼:

?

assert ["JAVA", "GROOVY"] ==

["Java", "Groovy"]*.toUpperCase()

注意*.標記。對于以上列表中的每個值,都會調用toUpperCase().生成的集合中每個String實例都是大寫的。

?

?

2)Grovvy中的Map

java語言中的映射是名稱-值對的集合。所以,要用java代碼創建典型的映射,必須像如下這樣:

Grovvy使得處理映射的操作像處理列表一樣簡單,例如,可以用Grovvy將上面的java映射寫成:

注意:Grovvy映射中的鍵不必恃String.在這個示例中,name看起來像一個變量,但是在幕后,Grovvy會將它變成String.

驗證hash格式:

assert ? hash.getClass()==java.util.LinkedHashMap

?

Grovvy中Hash的Set/Get

注意:在使用[]語法從映射獲取項時,必須將項作為String引用。

?

6Grovvy中的閉包

java的Iterator實例,用它在集合上迭代,就像下面這樣。

注意,each直接在acoll實例內調用,而acoll實例的類型是ArrayList.在each調用之后,引入了一種新的語法{,代碼}。由{}包圍起來的代碼塊就是閉包。

閉包中的it變量是一個關鍵字,指向被調用的外部集合的每個值-他是默認值,可以用傳遞給閉包的參數覆蓋他。下面的代碼執行同樣的操作,但使用自己的項變量:

在這個示例中,用value代替了Grovvy的默認it.

?

請注意,閉包還允許使用多個參數,在上面的實例中,包含兩個參數(key和value)

凡是集合或一系列的內容,都可以使用下面這樣的代碼進行迭代。

?

這段代碼是名為excite的閉包,這個閉包接受一個參數(名為word)返回的String是word變量加兩個感嘆號。請注意String實例中替換的用法。在String中使用${value}語法將告訴Grovvy替換String中的某個變量的值。可以將這個語法當成return word+"!!"的快捷方式。

輸出this is Grovvy

?

7Groovy中的類

新建一個類song

?

?

?

Groovy 自動提供一個構造函數,構造函數接受一個名稱-值對的映射,這些名稱-值對與類的屬性相對應。這是 Groovy 的一項開箱即用的功能 — 用于類中定義的任何屬性,Groovy 允許將存儲了大量值的映射傳給構造函數。映射的這種用法很有意義,例如,您不用初始化對象的每個屬性。


?

也可以添加下面這樣的代碼:

也可以添加像下面這樣直接操縱類的屬性:

在Song類中,添加以下代碼:

?

8 Grovvy中的單元測試

在Intellij中只需要加入@Test注解就可以使用JUnit測試

加個?可以防止空指針的錯誤:

9.擴展、

?

如果需要用Groovy做web 項目的話可以去了解一下Grails框架。

轉載于:https://www.cnblogs.com/dream-to-pku/p/5445705.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C和C++混合編程(__cplusplus使用)

第一種理解 比如說你用C開發了一個DLL庫&#xff0c;為了能夠讓C語言也能夠調用你的DLL輸出(Export)的函數&#xff0c;你需要用extern "C"來強制編譯器不要修改你的 函數名。 通常&#xff0c;在C語言的頭文件中經常可以看到類似下面這種形式的代碼&#xff1a; …

$.ajax 同步一不,ajax 同步不生效

可以用的生效代碼注意 boolean 的位置var baseUrl ${pageContext.request.contextPath };function formcheck(){var flag false;var customerNameaa;var countryaa;var citybeijing;$.ajax({type: POST,url:baseUrl "/exports/credit/findBuyersBySerach",data:{&…

iOS工程中創建pch文件

1.新建pch類文件 2.在工程配置中,Build Setting 下搜索"pre"尋找Apple LLVM6.1 - Language下的 Preflx Header 3.點開Preflx Header 把左邊pch類拖拽進去 4.把/"工程名"/....前邊的內容全部換為$(SRCROOT) (具體替換內容看報錯自己靈活運用)轉載于:https:/…

批處理中setlocal enabledelayedexpansion的作用詳細整理

設置本地為延遲擴展。其實也就是&#xff1a;延遲變量&#xff0c;全稱延遲環境變量擴展, 想進階&#xff0c;變量延遲是必過的一關&#xff01;所以這一部分希望你能認真看。 為了更好的說明問題&#xff0c;我們先引入一個例子。 例1: echo off set a4 set a5&echo…

一個服務器多個網站多個域名,多個域名一個服務器嗎

多個域名一個服務器嗎 內容精選換一換PAS(Primary Application Server)&#xff1a;主應用服務器。AAS(Additional Application Server)&#xff1a;擴展應用服務器。ASCS(ABAP Central Services)&#xff1a;SAP應用核心服務&#xff0c;是SAP應用的一個核心控件&#xff0c;包…

iframe 子父窗口互掉 js

一、父窗口調用iframe子窗口方法 1、HTML語法&#xff1a;<iframe name"myFrame" src"child.html"></iframe> 2、父窗口調用子窗口&#xff1a;myFrame.window.functionName(); 3、子窗品調用父窗口&#xff1a;parent.functionName(); 簡單地…

yii2 ajax分頁,Yii框架分頁技術實例分析

本文實例講述了Yii框架分頁技術。分享給大家供大家參考&#xff0c;具體如下&#xff1a;直接上代碼&#xff1a;1.首先寫控制器層先引用pagination類use yii\data\Pagination;寫自己的方法:function actionFenye(){$data Field::find(); //Field為model層,在控制器剛開始use了…

Spring源碼解析——如何閱讀源碼

閱讀目錄 下面看一下如何使用jar包以及源碼的source包  下面給出一個簡單的spring樣例  如何閱讀源碼最近沒什么實質性的工作&#xff0c;正好有點時間&#xff0c;就想學學別人的代碼。也看過一點源碼&#xff0c;算是有了點閱讀的經驗&#xff0c;于是下定決心看下spring…

c++多線程編程

一直對多線程編程這一塊很陌生&#xff0c;決定花一點時間整理一下。 os:ubuntu 10.04 c 1.最基礎&#xff0c;進程同時創建5個線程&#xff0c;各自調用同一個函數 [html] view plaincopy #include <iostream> #include <pthread.h> //多線程相關操作頭文件&am…

ajax當頁post請求,tag落地頁--通過ajax-post請求數據

查詢所有tag及其對應跳轉鏈接$tags get_tags(array(get>all));$output . ;if($tags) {foreach ($tags as $tag):$output . . $tag->name .;endforeach;} else {_e(No tags created., text-domain);}$output . ;echo $output;交互tag查詢image場景如下&#xff0c;通過頁…

GIT的PUSH指令

### GIT的PUSH指令 $ git push <遠程主機名> <本地分支名>:<遠程分支名> * git push命令用于將本地分支的更新&#xff0c;推送到遠程主機。 * 如果省略遠程分支名&#xff0c;則表示將本地分支推送到與之對應的遠程分支&#xff08;通常兩者同名&#xff…

Android 編程下 Touch 事件的分發和消費機制

Android 中與 Touch 事件相關的方法包括&#xff1a;dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev)&#xff1b;能夠響應這些方法的控件包括&#xff1a;ViewGroup、View、Activity。方法與控件的對應關系如下表所…

ios微信本地視頻上傳到服務器,ios本地視頻wx.uploadFile上傳

//上傳視頻uploadVideo:function(){let _this this;let list [camera, album];wx.showActionSheet({itemList: [拍攝視頻,從相冊選擇視頻,從視頻庫選擇視頻],success: function (res) {if(res.tapIndex0 || res.tapIndex1){wx.chooseVideo({sourceType:[list[res.tapIndex]],…

如何手工抓取dump文件及分析

在生產環境下進行故障診斷時&#xff0c;為了不終止正在運行的服務或應用程序&#xff0c;有兩種方式可以對正在運行的服務或應用程序的進程進行分析和調試。 首先一種比較直觀簡潔的方式就是用WinDbg等調試器直接attach到需要調試的進程&#xff0c;調試完畢之后再detach即可。…

Java 類加載機制詳解

2019獨角獸企業重金招聘Python工程師標準>>> 一、類加載器 類加載器&#xff08;ClassLoader&#xff09;&#xff0c;顧名思義&#xff0c;即加載類的東西。在我們使用一個類之前&#xff0c;JVM需要先將該類的字節碼文件&#xff08;.class文件&#xff09;從磁盤…

JAVA vo pojo javabean dto區別

JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean&#xff0c;類必須是具體的和公共的&#xff0c;并且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性。眾所周知&#xff0c;屬性名稱符合這種模式&#xff0c;其他Java 類可…

編寫的windows程序,崩潰時產生crash dump文件的辦法

一、引言 dump文件是C程序發生異常時&#xff0c;保存當時程序運行狀態的文件&#xff0c;是調試異常程序重要的方法&#xff0c;所以程序崩潰時&#xff0c;除了日志文件&#xff0c;dump文件便成了我們查找錯誤的最后一根救命的稻草。windows程序產生dump文件和linux程序產生…

Nginx+PHP實時生成不同尺寸圖片

原來圖片服務器采用Windows .net架構&#xff0c;鑒于需求需要生成各種尺寸圖片。流程說明:用戶從Nginx請求對應的圖片,判斷是否存在_200x300的對應參數&#xff0c;如果沒有就直接請求到對應目錄的原圖&#xff0c;否則繼續判斷是否在本地已經生成了對應的緩存圖片&#xff0c…

JavaScript設計模式 Item 2 -- 接口的實現

1、接口概述 1。什么是接口&#xff1f; 接口是提供了一種用以說明一個對象應該具有哪些方法的手段。盡管它可以表明這些方法的語義&#xff0c;但它并不規定這些方法應該如何實現。 2. 接口之利 促進代碼的重用。 接口可以告訴程序員一個類實現了哪些方法&#xff0c;從而幫助…

Spring Boot 樂觀鎖加鎖失敗 - 集成AOP

Spring Boot with AOP 手頭上的項目使用了Spring Boot&#xff0c; 在高并發的情況下&#xff0c;經常出現樂觀鎖加鎖失敗的情況&#xff08;OptimisticLockingFailureException&#xff0c;同一時間有多個線程在更新同一條數據&#xff09;。為了減少直接向服務使用者直接返回…