与java比较
- Groovy完全兼容java的语法
- 分号是可选的
- 类、方法默认是public的
- 编译器给属性自动添加getter/setter方法
- 属性可以直接用点号获取
- 最后一个表达式的值会被作为返回值
- ==等同于equals(),不会有NullPointerExceptions
public class Person{//类、方法默认是public的
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age //分号是可选的
}
String getName() {
return name
}
void setName(String name) {
this.name = name
}
int getAge() {
age //最后一个表达式的值会被作为返回值
}
}
Person p = new Person('张三',18)
p.name = '李四' //属性可以直接用点号获取
//println(p.name)
println p.name //括号可去掉,中间加空格
def version = 1 //可选类型定义,相当于javascript中的var
assert version == 2 //可直接使用断言
高效的Groovy特性
1. assert语句
2. 可选类型定义(使用def)
3. 可选的括号
4. 字符串
5. 集合API
6. 闭包
def version = 1 //可选类型定义,相当于javascript中的var
assert version == 1 //可直接使用断言
println version //括号是可选的
//字符串
def s1 = 'imooc' //单引表示就是字符串
def s2 = "gradle version is ${version}" //双引可插入变量
def s3 = '''my
name is
imooc'''
//三个单引号可以换行
println s1
println s2
println s3
//集合list
def person = ['zhangsan','lisi'] //定义list集合
person << 'wangwu' //增加元素
assert person.getClass() == ArrayList //通过
//集合map,对应的是java.util.LinkedHashMap
def house = ['songjiang':'big','lujiazui':'small']
house.jiuting = 'normal'
println house.jiuting
println house.getClass()
//闭包 在构建脚本中,闭包被当做方法参数来使用
def c1 = {
v ->
println v
}
def c2 = {
println 'hello'
}
def method1(Closure closure){
closure('param')
}
def method2(Closure closure){
closure()
}
method1(c1)
method2(c2)
用groovy看一个工程的build.gradle文件
//构建脚本中默认都是有个project实例的,默认的作用域都是project
//apply是project的方法
apply plugin:'java'
//project定义的一个属性version并赋值为0.1
version = '0.1'
//repositories是project的方法,闭包作为参数
repositories {
mavenCentral()
}
dependencies {
compile 'commons-codec:commons-codec:1.6'
}