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. &和&&的区别

    &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false. ...

  2. Hibernate的映射组件属性

    组件属性 如果持久化类的属性并不是基本数据类型,也不是一个日期或者字符串常量,而是一个复合类型的对象,例如 private Name name; 那么这就是一个组件属性. 组件属性可以是任何普通的ja ...

  3. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  4. 2016年12月27日 星期二 --出埃及记 Exodus 21:22

    2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...

  5. C# 委托实例(跨窗体操作控件)

    在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...

  6. 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)

    首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...

  7. CPU过高的排查方法

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...

  8. JAVA 1.3 (原生数据类型 Primitive Data Type)续

    1. 原生数据类型一共有4类8种 >> 整数类型 int表示一个int代表32位 2^32(-2147483648 - 2147483647) >> 字符类型 byte 表示一 ...

  9. Spring MVC简介

    Spring MVC简介 Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...

  10. OO的五大原则是指SRP、OCP、LSP、DIP、ISP。

    OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则- ...