Groovy入门经典 随书重点
1 数值和表达式
1.1数值
- 整数是Integer类的实例
- 有小数部分的数值是BigDecimal类的实例
不同于java,没有基础数据类型
一切皆对象的概念重于java
1.2表达式
- 两个整数的除法运算通常会产生一个浮点数
- 获得两个整型值相除的整数部分,使用#intdiv
- 浮点数取模非法
1.3运算优先级
*/% 优先于 +-
1.4赋值
- def先声明变量,后使用
等同于js,弱类型
- 标识符 和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正则表达式
~’regex’定义正则表达式
def regex=~’cheese’
if(‘cheesecake’=~’cheese’) //左边String对象和右边的正则匹配,返回布尔值
==~ 精确匹配 ‘cheesecake’==~’cheese’
\\\\在正则中表示一个反斜杠字符
类似于java中正则的使用,用单引号括起
也可以用js的方法,直接使用,不用引号
def matcher="\$abc."=~\\\$(.*)\\.
def matcher="\$abc."=~/\$(.*)\./
3列表、映射和范围
3.1列表
类似于java的List,增加了一些自己的方法
列表对象和访问列表元素
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
访问 调用#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]赋值 调用#putAt
divisors[6]=[6,3,2,1]
声明
[:] 空映射
如果某个元素的关键字是变量,将被解释成一个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入门经典 随书重点的更多相关文章
- 正经学C#_位移与其位移运算符[c#入门经典]
在c#入门经典一书中,最为糟糕的一节就是位移了,完全没有讲明白,也没有说全,似乎只是轻轻点了一下何为位移,带了两次原码和补码,完全不理会是否明白不明白.这一点这本书很差.因为此书说了,在大多数应用开发 ...
- HTML与CSS入门经典(第9版)试读 附随书源码 pdf扫描版
HTML与CSS入门经典(第9版)是经典畅销图书<HTML与CSS入门经典>的最新版本,与过去的版本相同,本书采用直观.循序渐进的方法,为读者讲解使用HTML5与CSS3设计.创建并维护世 ...
- Groovy入门教程
Groovy入门教程 kmyhy@126.com 2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)
<C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
随机推荐
- winform label文本转换为图片 、Picturebox+label合并转换为图片
public Form1() { InitializeComponent(); //label存入Picturebox pictureBox1.Controls.Add(label1); pictur ...
- Cas 介绍及使用
CAS(Central Authentication Service)是Yale大学发起的一个企业级的.开源的项目,旨在为web应用系统提供一种可靠的单点登录解决方法(属于 web sso). 主要特 ...
- 一个 div 实现扇形图(锥形渐变)
需要引用的js文件<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min ...
- vs快捷键大全
前言 作为一个.net开发员,你还在用鼠标去点击相应的操作么?如果你回答是,那么你太low了! 一个很厉害的程序员不会是那种这鼠标到处狂点的人,他们肯定会很多快捷键,所以为了离他们更近一步,我们必须学 ...
- 关于Android中ArrayMap/SparseArray比HashMap性能好的深入研究
由于网上有朋友对于这个问题已经有了很详细的研究,所以我就不班门弄斧了: 转载于:http://android-performance.com/android/2014/02/10/android-sp ...
- Linux杂乱小知识点
1.不同网段的主机不能建立TCP连接 2.TCP客户端可以用bind绑定自己的IP与port(一般情况下不需要绑定,port由系统自动分配) 3.accept() 函数返回一个套接字,send / r ...
- 微信小程序实例
看到小程序,那么火,自己也想动手写一个.但是没有很好的api接口.有一天看到一个开发安卓的朋友,写了一个干货集中营的小程序.就搜了一下.看到api是免费开放的.于是自己也动手写了一个. 具体的微信小程 ...
- python 学习笔记十七 django深入学习二 form,models
表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...
- [转]VB Winsock 控件TCP与UDP连接实例
[-] 可能的用途 选择通讯协议 协议的设置 确定计算机的名称 TCP 连接初步 接受多个连接请求 UDP 初步 关于 Bind 方法 利用 WinSock 控件可以与远程计算机建立连接,并通过用 ...
- 20161127-emmagee
Android 自动化测试 Emmagee Emmagee 是一个性能测试小工具 用来监控指定被测应用在使用过程中占用机器的CPU, 内存,流量资源的性能小工具 阅读目录 Emmagee 介绍 Emm ...