groovy入门

1.在Groovy可以用def定义无类型的变量(定义变量方面def与JavaScript中的var相似),和返回值为无类型的方法

class Man {
def name = "山风小子"
def introduce() {
return "I'm $name" // return可以省略
}
}

2.Java中的equals方法对应Groovy中的== , 而Java中的==(判断是否引用同一对象)对应Groovy中的is方法 eg.

3.Java中的数组定义int[] a = {1, 2, 3}; 在Groovy写成int[] a = [1, 2, 3]

4.Java中的for循环for (int i = 0; i < len; i++) {...} 在Groovy中还可以写成for (i in 0..len-1) {...} 或者 for (i in 0..<len) {...}

5.Groovy中的注释比Java多了首行注释#!,其他与Java相同比如单行注释:// 多行注释:/* */ 或者是 支持javadoc的/** */

6.Java5中的for-each:for (Type t : iteratable) {...} 在Groovy中,for (t in iteratable) {...}

7.在Groovy中定义类,定义方法与Java中定义类相同,唯一区别在于Groovy中类,属性以及方法默认都是public的,而在Java中默认是package的

8.Hash常量(类型为java.util.HashMap)在Java没有,在Groovy中表示为 def frequence = ["the": 5, "hello": 2, "world": 2]

9.在varargs方法方面,Groovy比Java多一种表达方式,如下所示:

// 与Java中的写法相同
def varargsMethod(Type... args) {
//do something
}
// Groovy还可以用[]代替...,反应出varargs的本质
def varargsMethod(Type[] args) {
//do something
}


10.方法的默认参数,Groovy中表示如下:

class Hello {
//如果没有参数传入,默认打印出 Hello, 山风小子
def greet(name="山风小子") {
println("Hello, $name") //也可省略括号()
}
}


11.Groovy不仅有? :三元操作符,还有?:两元操作符,但Java只有? :三元操作符。

def a = null;
// 如果a为“空”(null,空串"",[],[:]),那么结果为?:之后的那个值; 如果不为“空”,那么结果就是a
def result = a ?: "default result"
println result

a = "山风小子"
result = a ?: "default result"
println result


12.引用当前对象,Groovy和Java相同,在Java中用this表示,在Groovy中也用this表示,而且在Groovy中,this可以出现在static范围中,指向所在类的类对象,本例中,this等同于ThisInStaticScope.class(Java写法)或ThisInStaticScope(Groovy写法)

class ThisInStaticScope {
static {
println this
}
// 请不要诧异,参数类型可以省略。如果方法声明中有修饰关键字比如public,synchronized,static等,则返回值类型可以省略。
static main(args) {
println this
}
}


13.closure中的delegate ,closure中的delegate类似于类中的this
闭包是一种传递执行代码块的强大方法。可以把闭包看作Java中的匿名内类,但是只有单一的(匿名)方法。闭包用"{}"括起,"->"前面是参数,如果有多个参数用逗号隔开。如果只有一个参数,可以省略前面的参数和"->",而使用缺省的参数"it"。


public class DelegateDemo{
String author = "山风小子"

def someMethod(closure) {//调用时,就像是“块”替换
println "The original delegate of closure is: ${closure.delegate}"
// 无需设置closure.delegate,因为closure的delegate默认值已经是DelegateDemo.this
closure.delegate = this
closure()
}

def greet(words) {
println words
}

public void main(args){

def delegateDemo = new DelegateDemo()
delegateDemo.someMethod {
// 传入someMethod2的closure {} 所处的context的this是DelegateDemo.this
// 所以closure的delegate的默认值也是DelegateDemo.this
// 此处的delegate可以省略
delegate.greet("Hello, " + delegate.author)
}
delegateDemo.someMethod {
// 省略了delegate
greet("Hello, " + author)
}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值