02Groovy语法(一)
来源:互联网 发布:上海升级网络 不靠谱 编辑:程序博客网 时间:2024/06/03 17:08
Groovy语法直接来源于java的语法特性。
比如:
关键字和语句都是和java类似。
类,接口,属性,方法的定义。
Groovy也是使用new来创建对象的。
Groovy也会自动的导入许多包:
groovy.lang.*
groovy.util.*
java.lang.*
java.util.*
java.util.regex.*
java.net.*
java.io.*
异常处理也是try/catch/finally机制
运算符,表达式,赋值
控制结构
代码注释
等等这些都是和java语法类似的。
数值与表达式
数值
Groovy中所以东西都是对象。整数(-1,200,20)都是Integer类的对象。
定义变量(动态类型):def price = 100
等同于:Integer price = new Integer(100);
groovy语句可以不使用逗号结尾。
也是支持自动的拆箱和装箱。
3.times{println “Hello”}:打印三次。这个在Java中无法实现的。(把3看做一个对象;所以对象.方法是正常的)
浮点数:1.5,-3.14都是BigDecimal类的对象。
数值类型:
Integer 15 Long 100L,100l
Float 1.23F Double 1.25D
java.math.BigInteger 123g,456G(无小数点)
java.math.BigDecimal 1.23g,1.23G(有小数点)
GDK中的数值方法:
def store = ''10.times{store += 'X'}:执行10次。1.upto(5){number -> store += number}:数字从1,到5(这里是一个闭包:number作为参数)2.downto(-2){number -> store+= number+''}:从大到小。0.step(0.5,0.1){number -> store += nubmer + ''}:从0开始,一直长到0.5,每次长0.1。后面又是一个闭包。
运算符
基于方法的运算符。
a==b 等价于 java中的 a.equals(b)
Groovy中的===就是java中的==
Groovy支持操作符重载,重载运算符对应的方法就是操作符重载。(实际上就是方法的重载)
<<操作符被重载,以支持向集合中添加项。
?=安全引用操作符(防止空指针异常),在方法调用前添加一?就相当于在调用前面放了一个条件,可以防止在null对象上调用方法。?操作符非常有用,可以极大减少条件语句。
基于方法的运算符:
注意最后三个比较方法,大于返回1,等于返回0,小于返回-1.
这些方法可以到GroovyConsole中去验证:Ctrl+Enter
执行。(断言成功返回null)
字符串简介
字符串GString简介
def str = “hello”;print str//同行中多个语句,‘;’不能少哦
def name = ‘xiaoxiao’
print “${name}
“:引用name变量的值
Groovy中字符串可以使用单引号或双引号括起来(可以在其内部加入\n等转义字符),但是java中不行,java中单引号用来包含单个字符,双引号才能包含字符串。
原格式输出:三个单引号。不用像java中使用+号来连接字符串。
print ''' aaa bbb'''
三个双引号:内部就可以使用${}来获取变量的值。
print """ \taaa ${name} \nbbb"""
Groovy中的方法
Groovy中可以直接使用java方法。
变量作用域与java方法类似。
可以使用动态类型或静态类型:
安全引用时使用静态类型。OR映射时使用静态类型,指定变量类型与数据库列匹配。
可以省略return,默认返回最后语句的值
定义方法
def fun(name){ println "Hello ${name}"//默认返回最后一句值,没有使用return语句。}
执行方法
fun(“小名”)
Groovy方法的默认参数
这个在java中也是不被支持的。
def fun(name,welcomeStr=’Hello’){
print “
}
func(“小明”)//输出 Hello 小明
func(“小明”,”翻译”)//输出:翻译 小明
调用方法时,优先选择匹配参数个数的方法。
例如上面的第一个定义的fun()和第二个定义的fun();当只传入一参数是就是调用第一fun()。
也可以通过指定具体参数的类型,来进行匹配。
Groovy方法的参数:值传递还是引用传递?
def printName(name){
println “before
}
def name = “SS”
printName(name)
输出:before SS
after “小明”
println “${name}”:输出:SS
可见Groovy方法参数是值传递。
控制流程
循环
def count = 1;def limit = 5while(count <= limit){ println "count: ${count}" count++}for(i = 0;i<5;i++){pirntln "hello"}for(i in [1,2,3,4,5]){//可以用在范围或映射或GSting上 print i}break 和continue与java一样。
判断
if(1){println “Goog”}//输出:Goog
def a
if(a){println “good”}
else{print ‘null’}def b = []
if(b){println “good”}
else{print ‘null’}def c = [1:”FF”,2:”DD”]
if(c){println “good”}
else{print ‘null’}
结论:if的条件除了是布尔值外,可以可以是对象,空表示FALSE,否则为TRUE
switch语句
A:java类似的
switch(4){case 1: pirntln "One" ;breakcase 2: println "Two" ; break.....default: println "Default"}
B:Groovy特性
def var = 0switch(var){case 0: println "One"case 11..20: println "Two"//var 值在11-20范围之间case '10': println "Three"case [1,2,3]: println "Four"//一个列表中的元素。case Float: println "Five"//1.5F满足float类型case {it % 3 == 0}: println "Six"//满足闭包条件case ~'[0-9]{3}': println "Seven"//正则default : println "default"}
控制台输入与输出
读取标准输入:
def name = new BufferedReader(new InputStreamReader(System.in)).readLine()
println “your name is :${name}”
System.in.readLine()已经被废除了,在Groovy中使用会出错。
标准输出:
print 不换行println 换行
格式化输出 :printf
printf(“%d-%f-\n[%s][%10s][%-10s]”,[5,5.2,’sdfs’,’sdfsd’])
%d:按整型数据
%f:按浮点类型输出
%-10s:宽度10,左侧输出字符串
我们可以通过GroovyConsole小工具来验证代码片段
注意:Groovy编程,可以是脚本,也可以重构为Groovy类。
Groovy中==与java中的不同
- 02Groovy语法(一)
- Groovy入门(一)—— Groovy语法
- Groovy学习笔记(一)基本语法
- groovy语法
- Gradle系列第(一)篇---Groovy语法初探
- Gradle系列第(一)篇---Groovy语法初探
- Gradle详解(一)——Groovy语法快速入门
- Groovy基础语法
- Groovy的基础语法
- Groovy基本语法(1)
- Groovy基本语法(2)
- Groovy基本语法(3)
- Groovy常用语法总结
- Groovy常用语法总结
- Groovy的基础语法
- 转载Groovy基本语法
- Groovy常用语法总结
- groovy语法篇介绍
- Pots(由于我的zz,被搞死了lol)
- 当HashMap的键遇见自定义类型时
- Django 新手之常见错误--亲身体验,持续更新ing...[哭]
- Java Web Servlet
- 521.Longest Uncommon Subsequence I
- 02Groovy语法(一)
- [Command]Linux 文件格式化处理
- 这题别看了,跳过吧
- 【Web】锋利的jquery知识点总结
- 【BZOJ1040】骑士(ZJOI2008)-环套树+最大权值独立集
- GO语言结构体
- spring cloud实现微服务容错处理
- TNetHTTPClient演示
- java中的常用编码表