Groovy学习()面向Java开发者的Groovy

时间:2021-01-27 19:51:27

 

第一段Groovy代码

 

// first groovy program
for(int i = 0; i < 3; i++) {
    System.out.println("ho ");
}

System.out.println("Merry Groovy");

 

看起来好简单。

还有更简单的方式:

for (i in 0..2) { print 'ho '}

 

0.upto(2) { print "$it "}

upto默认接受一个闭包作为参数,如果闭包只需要一个参数,在Groovy中可以使用名字it来表示该参数。

 

如果范围从0开始,还可以使用times

3.times { print "$it " }

 

Groovy没有强迫使用一组新的类库,而是可以通过向JDK的各种类添加便捷方法,Groovy扩展了强大的JDK。

比如调用系统命令

 

println "groovy.bat -v".execute().text

这里的bat不能省略,奶奶的。

 

或者可以这样

println "groovy.bat -v".execute().text
println "cmd /C groovy -v".execute().text

 

def foo(str) {
    // if (str != null) { str.reverse(); }
    print str?.reverse()
}

foo('evil')
print '\n'
foo(null)

 

Java强制我们处理所有的受检查异常(Checked Exception)。

 

对于那些我们不想处理,或者不适合在代码的当前层次处理的异常,Groovy并不强制我们处理。

我们不处理的任何异常都会被自动传递到更高一层去。

 

// 定义打开文件
def openFile(fileName) {
    new FileInputStream(fileName)
}

try {
    openFile("nonexistentFile")
} catch (FileNotFoundException ex) {
    println "Oops: " + ex
}

 

注意,这里不能捕获Exception之外的Error或Throwable。要捕获这些请用catch(Throwable throwable)

 

class Car {
    def miles = 0
    final year

    Car(theYear) {
        year = theYear
    }
}

Car car = new Car(2008)

println "Year: $car.year"
println "Miles: $car.miles"
car.miles = 25
println "Miles: $car.miles"

 

看起来好简单的样子啊。

JVM不愧是宇宙第一虚拟机。

 

如果属性给了final,那么只会提供访问器,而不会提供更改器。

修改final字段的任何尝试都会导致异常。

 

请谨慎使用class属性,像Map、生成器等一些类对该属性有特殊的处理。因此为了避免意外,一般使用getClass,而不是class。