(1)Groovy是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。
我们sys_rule中使用的Groovy就是脚本语言。由Common提供的执行器执行。
二、注释
“#!”注释只允许在脚本文件的第一行出现,通过这种方式Unix shell能定位groovy的启动脚本并且运行这些脚本。
“//”单行注释,注释文字必须在这一行结束。
多行注释使用“/*……*/”包围起来。
Javadoc风格的注释“/**……*/”和多行注释是相似的,但是这种注释支持groovydoc用来生成文档,groovydoc与javadoc使用的语法是等价的。
#!注释只允许在脚本文件的第一行出现
(3)
//单行注释
/*
多行注释
*/
/**
文档注释
**/
println("Hello World")
三、语法自动导包
Groovy自动导入以下包和类:
groovy.lang.*
groovy.util.*
java.lang.*
java.util.*
java.net.*
java.io.*
java.math.BigInteger
java.math.BigDecimal
(5)
//java.math
BigDecimal num = new BigDecimal("123456")
println(num)
//java.util
ArrayList<String> list = new ArrayList<String>()
list.add("123")
list.add("456")
list.add("789")
println(list)
四、语法简化内容
1.不需要public修饰符 因为类和方法修饰符默认为public 属性则默认为private
class Book
{
String title
Book (String theTitle)
{
title = theTitle
}
String getTitle()
{
return title
}
}
Book book = new Book("Groovy in Action")
println book.getTitle()
(7)
2.不需要getter/setter,可以直接使用类实例的属性
class Book
{
String title
Book (String theTitle)
{
title = theTitle
}
}
Book book = new Book()
println book.title
book.setTitle("Groovy")
println book.getTitle()
(8)
3.不需要分号。不需要括号
String str = "123";
println str;
println (str)
(9)
4.不需要类型说明,不关心属性的具体类型,可以直接使用def声明,当然也可以和java一样使用int、String等声明一个属性类型
def num1 = 123
def num2 = '123'
def num3 = 12.3
def num4 = 123000000000000000000
def num5 = 123000000000
println num1.class
println num2.class
println num3.class
println num4.class
println num5.class
(10)
5.不需要return,我们定义有返回值的方法时,return语句不是必须的,当没有return的时候,Groovy会把方法执行过程中的最后一句代码作为其返回值
def num1 = method 1,2
def num2 = method "Test1","Test2"
println "num1 " + num1
println "num2 " + num2
def method(def a, def b)
{
if (a > b)
{
a
}
else
{
b
}
}
五、强制类型的转换
类型转换,可以使用as关键字强制类型转换,也可以使用Java的强制类型转换(不推荐)
def num = "123"
println num.class
def num1 = num as Integer
println num1.class
long a = 123
int b = (long)a
println a.class
println b.class
六、字符串
单引号和双引号可以表示字符串。
异同:
两者都可以定义一个字符串常量。
单引号是纯粹的字符串常量,双引号里的字符串里的表达式可以做运算。
def name = 'liuhuimin'
def str = "My name is ${name}"
println str
PS:三引号可以表示多行字符串
def str = '''line 1
line2
line3
'''
println str
七、集合
List
定义一个List,可以直接使用def list = [1,2,3],访问List可以不使用get,而是使用数组下标的访问形式。
def list = [1,2,3]
println list.class
println list[0]
Groovy还提供了负下标和范围索引,负下标表示从最后一个开始数,-1为最后一个
println list[-1]
Groovy还提供了范围索引类
println list[0..1]
(14)
1.传统Java遍历方法
def list = [1,2,3]
for (def i = 0; i < list.size(); i++)
{
println list[i]
}
for (def i : list)
{
println i
}
2.Groovy中遍历方法
def list = [1,2,3]
for (def i in list)
{
println i
}
list.each
{
t -> println t
}
list.each
{
// 魔术变量it可以省略
println it
}
(15)Map
Map是由键值对(key-value,通过冒号分隔键与值)组成的集合。
def map = ["key1":0,"key2":1,"key3":1]
println map["key1"]
println map.key2
Map遍历
1、Java方法
def map = ["key1":0,"key2":1,"key3":2]
for (def entry : map.entrySet())
{
println "key: ${entry.key},value: ${entry.value}"
}
2、Groovy方法
def map = ["key1":0,"key2":1,"key3":2]
map.each
{
println "key: ${it.key},value: ${it.value}"
}
map.each
{
key, value -> println "key: ${key},value: ${value}"
}