1 数值和表达式

1.1数值

  1. 整数是Integer类的实例
  2. 有小数部分的数值是BigDecimal类的实例

不同于java,没有基础数据类型 
一切皆对象的概念重于java

1.2表达式

  1. 两个整数的除法运算通常会产生一个浮点数
  2. 获得两个整型值相除的整数部分,使用#intdiv
  3. 浮点数取模非法

1.3运算优先级

*/% 优先于 +-

1.4赋值

  1. def先声明变量,后使用

    等同于js,弱类型

  2. 标识符 和java一样的命名规则

1.5自增和自减运算符

类似于java

1.6对象引用

动态类型

变量引用的类型是在运行时确定,而不是在编译时,类似于java的多态 
也有垃圾回收机制,类似于java的

1.7关系运算符和等于运算符

关系运算符:< <= > >=通过#compareTo实现 
等于运算符:== !=调用#equals <=>调用#compareTo

都是调用某个方法实现

2字符串和正则表达式

2.1字符串字面值

单引号:所见即所得 
双引号:解释性字符串 
三引号:解释性字符串 多行文本用这个

单双引号可混在一起使用,类似js;也可以使用\进行转义,类似java

   

 'He said "Hello"!'
'He said \"Hello\"!'

解释性字符串中的${expression}都将被求值,结果作为字符串的一部分

 
 def age=25
'My age is ${age}' //My age is ${age}
"My age is ${age}" //My age is 25
"""//My age is ${age}""" //My age is 25
"""My
age
is \${age}""" //My age is ${age}

解释用双,其他用单

2.2字符串索引和索引段

字符串是顺序排列的字符集合

索引类似于java String的#charAt 
获取指定位置的字符类似于数组

 
 def greeting='Hello World'
greeting[4] //o
greeting[-1] //d
greeting[1..2] //el
greeting[1..<3] //el
greeting[4..2] //oll
greeting[4,1,6] //oew

2.3基本操作

字符串不可变

等同于java

 
 def greeting='Hello world'
'Hello'+'world' //Helloworld
'Hello'*3 //HelloHelloHello
greeting-'o world' //Hell
greeting.size() //
greeting.length() //
greeting.count('o') //
greeting.contains('ell') //true

2.4字符串方法

 def message='Hello'
message.center(11) //返回长度为11,左右两边均使用空格填充的字符串
message.center(3)
message.center(11,'#')
message.eachMatch('.')

2.5比较字符串

== 调用#equals 
<==> 调用#compareTo

2.6正则表达式

  1. ~’regex’定义正则表达式

    def regex=~’cheese’

  2. if(‘cheesecake’=~’cheese’) //左边String对象和右边的正则匹配,返回布尔值

==~ 精确匹配 ‘cheesecake’==~’cheese’

\\\\在正则中表示一个反斜杠字符

类似于java中正则的使用,用单引号括起 
也可以用js的方法,直接使用,不用引号

 def matcher="\$abc."=~\\\$(.*)\\.
def matcher="\$abc."=~/\$(.*)\./

3列表、映射和范围

3.1列表

类似于java的List,增加了一些自己的方法

  1. 列表对象和访问列表元素

     def numbers=[11,12,13,14]
    number[0] //11
    number[-1] //

[]调用List类的#getAt

 number[0..2]    //[11,12,13]
number[1..<3] //[12,13]

类似于前面的String访问

包含边界的索引范围访问,产生一个新的列表对象

 <<  把新元素追加到列表末尾 调用#leftShift
+ 连接两个列表 调用#plus
- 从列表删除元素 调用#minus
number[1]=[33,44] 调用#putAt

3.2映射

类似于java的Map

  1. 访问 调用#getAt

     def names=[‘ken’:’Barclay,’John’:’Savage’]
    def divisors=[4:[2],6:[3,2],12:[6,4,3,2]]
    names[‘Ken’] //第一种访问写法
    names.Ken //第二种访问写法
    divisors[6]
  2. 赋值 调用#putAt

     divisors[6]=[6,3,2,1]
  3. 声明

    [:] 空映射

如果某个元素的关键字是变量,将被解释成一个String

 def x=1
def y=2
def m=[x:y,y:x] //m=['x':2,'y':1]

3.3映射方法

 def map=['ken':2745,'john':2746,'sally':2742]
map.get('david',9999) //
map.get('sally') //
map.keySet() //[david,ken,sally,john]
mp['ken'] //
mp.values.asList()

3.4范围

 def twentiethCentury=1900..1999
def reverseTen=10..1
twentiethCentury.size()
twentiethCentury.get(0)
twentiethCentury.getFrom()
twentiethCentury.getTo()
twentiethCentury.contains(2000)
twentiethCentury.subList(0,5)
reverseTen[]2
reverseTen.isReverse

4基本输入和输出

4.1基本输出

 print "My name is"
print("MaYiwen")
println()
//My name is MaYiwen
def age=25
prinln "My age is:{age}" def numbers=[1,2,3,4]
def staffTel=['ken':2745,'john':2746,'jessie':2772]
println "Numbers:${numbers}"
println "Staff telephone:${staffTel}"
//Numbers:[1,2,3,4]
//Staff telephone:['ken':2745,'john':2746,'jessie':2772]

4.2格式化输出

 printf

类似java

5 方 法

5.1 方法

类似js 方法没有返回值

5.2 方法参数

参数不需要指明类型,只需要在括号中放变量名就可以

 def methodName(para1,para2,para3){}

5.3 默认参数

方法中的形参可以指定为默认参数

 def someMethod(para1,para2=0,para3=0){}
someMethod方法可以通过一个、两个或者三个实参调用,至少提供一个实参

5.4 方法返回值

return 可选,省略了,代码的最后一条语句的值就是方法的返回值

5.5 参数传递

值传递

类似于java

5.6 作用域

5.7 集合作为参数和返回值

流程控制

6.1 while语句

类似于java

6.2 for语句

类似于java

7类

getter和#setter都是groovy类的隐含方法

 class Account{
def number
def balance
}
def accounts=[new Account(number:'abc123',balance:1200),
new Account(number:'pqr456',balance:200)]
accounts.each{acc->println acc}

在java中,account类通常包含初始化类对象的构造器方法。在groovy中并不需要做次工作,只需要使用new操作符和指定的参数即可替代。 
在groovy中同样也有构造器方法。

 class Account{
def number
def balance
def Account(number,balance){
this.number=number
this.balance=balance
}
}
def accounts=[new Account('abc123',1200),new Account('pqr456',200)]
def account=new Account(number:'abc123',balance:1200)//报错

类似于java,提供构造器会覆盖默认构造器,所以上面第10行调用默认构造器的代码报错

Groovy入门经典 随书重点的更多相关文章

  1. 正经学C#_位移与其位移运算符[c#入门经典]

    在c#入门经典一书中,最为糟糕的一节就是位移了,完全没有讲明白,也没有说全,似乎只是轻轻点了一下何为位移,带了两次原码和补码,完全不理会是否明白不明白.这一点这本书很差.因为此书说了,在大多数应用开发 ...

  2. HTML与CSS入门经典(第9版)试读 附随书源码 pdf扫描版​

    HTML与CSS入门经典(第9版)是经典畅销图书<HTML与CSS入门经典>的最新版本,与过去的版本相同,本书采用直观.循序渐进的方法,为读者讲解使用HTML5与CSS3设计.创建并维护世 ...

  3. Groovy入门教程

    Groovy入门教程 kmyhy@126.com  2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM ...

  4. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  5. 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)

    <C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...

  6. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  7. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  8. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  9. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

随机推荐

  1. nodejs学习笔记二:解析express框架项目文件

    上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...

  2. 如何让你的App适配iOS7?

    随着苹果在2013年9月18日发布iOS7最新的系统以来,iOS各种设备升级到iOS7的数字就已经不断刷新记录.目前据外界统计iOS7设备装机量已经达到2.5亿部,已占iOS设备的64%.由此可见让自 ...

  3. Android 进程常驻----native保活5.0以上方案推演过程以及代码

    正文: 上一篇我们通过父子进程间建立双管道,来监听进程死掉,经过测试,无耗电问题,无内存消耗问题,可以在设置中force close下成功拉起,也可以在获取到root权限的360/cleanmaste ...

  4. 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动

    一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...

  5. jQuery事件总结

    blur() 触发或绑定blur事件.$("input").blur(function(){ $("input").css("background-c ...

  6. U盘插入电脑后,提示需要格式化U盘如何解决?

    未弹出U盘就拔掉U盘,有可能会破坏U盘的分区表.当再次把U盘插入电脑时,会提示需要格式化U盘,这是什么情况,如何解决呢?其实只要用DiskGenius硬盘恢复软件就可以解决这个问题.下面和小编一起来看 ...

  7. iOS Library not loaded: Reason: image not found

    iOS Library not loaded: ReactiveCocoa.framework ...Reason: image not found 解决办法:BuildPhases中,将对应的框架的 ...

  8. Upload Files To FTP in Oracle Forms D2k

    Upload Files To FTP in Oracle Forms D2k Use following procedure to upload files to Ftp.   PROCEDURE ...

  9. 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

    zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...

  10. centos 带S权限的二进制

    早上写的一个用find查找带S权限的,感觉不记一下可惜了. [root@iZ28wg1kditZ ~]# find / -type f -exec ls -al {} \;|awk 'BEGIN {p ...