Apache Groovy 是一个 强大的 、 可选类型 和 动态 具有 静态类型和静态编译 用于 Java 平台的 旨在通过简洁、 熟悉且易于学习 语法 。 它可以与任何 Java 程序顺利集成,并立即交付给您的应用程序 强大的功能,包括脚本功能、 领域特定语言 创作、 运行时和编译时 元编程 和 函数编程。
https://groovy.apache.org/download.html
Groovy 4.0 需要 Java 8+,最高支持 Java 16
解压打开即可,可以不配环境变量
与Groovy类不同的是我们需要删除class
类与脚本可以同时存在,测试类的名称不能和文件名相同
println("hello world")
class test{
}
使用def声明
class test{
def name;
def pwd;
private def getName(){
}
}
单行://
多行:/**/
这是常规使用,没什么特别的
作为引用变量${},有运算能力
模板字符串,支持换行
Test1类
package cn.test
class Test1 {
def username = "zhangsan";
}
测试脚本
package cn.test
def test1 = new Test1()
println(test1.getUsername())
结合三单号字符串和双引号字符串,可换行模板并设置插值有运算能力
""" word """
Groovy 列表是普通的 JDK java.util.List,因为 Groovy 没有定义自己的集合类。 定义列表文字时使用的具体列表实现默认是 java.util.ArrayList
def list = [1,2,3,4]
这样就从Number转化为String了
def salary = 169.8 as String
String[] arrStr = ['Ananas', 'Banana', 'Kiwi']
def colors = [red: '#FF0000', green: '#00FF00', blue: '#0000FF']
//当然你也可以像下面这样
def map = new HashMap()
map.put("name","zhangsan")
println(map.get("name"))
运算符 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
** | 幂 |
int a = 0b00101010
assert a == 42
int b = 0b00001000
assert b == 8
assert (a & a) == a
assert (a & b) == b
assert (a | a) == a
assert (a | b) == a
int mask = 0b11111111
assert ((a ^ a) & mask) == 0b00000000
assert ((a ^ b) & mask) == 0b00100010
assert ((~a) & mask) == 0b11010101
<<
: 左移>>
: 右移>>>
: 右移无符号和Java一样
a > 0 ? a : b
相当于直接调用方法
方法指针运算符 ( .&) 可用于在变量中存储对方法的引用, 为了以后调用它:
def str = 'example of method reference'
def fun = str.&toUpperCase
使用方法指针有很多优点。 首先,这种方法指针的类型是 一个 groovy.lang.Closure, 所以它可以在任何需要使用闭包的地方使用
def transform(List elements, Closure action) {
def result = []
elements.each {
result << action(it)
}
result
}
String describe(Person p) {
"$p.name is $p.age"
}
def action = this.&describe
def list = [
new Person(name: 'Bob', age: 42),
new Person(name: 'Julia', age: 35)]
assert transform(list, action) == ['Bob is 42', 'Julia is 35']
if(){
}else if(){
}else{
}
for (int i = 0; i < 5; i++) {
message += 'Hi '
}
def x = 0
for ( i in 0..9 ) {
x += i
}
def x = 0
def y = 5
while ( y-- > 0 ) {
x++
}
def count = 5
def fact = 1
do {
fact *= count--
} while(count > 1)
try{
...
}catch(...){
...
}finally{
....
}
package cn.test
class Test1 {
//注释
def des = "zhangsan"
def username = "define user name : ${des}"
def pwd = '12345'
def word = '''word1
word2'''
def combine(def str){
username = str + username
}
}
package cn.test
def test = new Test1()
println(test.username)
println(test.pwd)
println(test.word)
println(test.getUsername())
println(test.getWord())
println(test.combine("username:"))
println(test.combine('''username is :'''))
println(test.combine('user is:'))