在groovy中定义类和java中是同样的。类的方法能够是static,也能够是非static的。java
groovy中的方法能够是public, protected, private,同时也支持java中的修饰符,好比synchronized。函数
在groovy中导入包或者导入类,语法和java是同样的。只不过在groovy中默认已经导入了下面的package:spa
1 |
java.lang |
2 |
java.io |
3 |
java.math |
4 |
java.net |
5 |
java.util |
6 |
groovy.lang |
7 |
groovy.util |
在groovy和java中不一样的一点就是,groovy默认是public的。.net
每个groovy类,在JVM层级,都是字节码形式的java code,因此在java代码中能够调用groovy中申明的方法,反之亦然。命令行
你能够指定方法的参数和返回值,以便他们可以更好的和java代码相互调用。固然你也能够实现接口或者重载方法。可是须要你没有指定方法后者属性的类型的话,那么在JVM层级的字节码中,他们将会是 java.lang.Object 类型。code
好比:接口
1 |
//Callee.groovy |
2 |
class Callee { |
3 |
void hello() { |
4 |
println "hello, world" |
5 |
} |
6 |
} |
1 |
//Caller.groovy |
2 |
c = new Callee() |
3 |
c.hello() |
下面给出了一个最简单的groovy脚本:ip
1 |
println "Nice cheese Gromit!" |
若是你是要groovyc来编译上面的代码的话,假设你这个脚本的名字为Foo.script,那么你就会得到 Foo.class文件。string
你能够在命令行运行下面的代码,假设你的classpath中包含:groovy.jar and asm.jar.it
1 |
java Foo |
这将执行自动生成的实例化Foo class的 main(String[] args)方法,而后调用run()方法。固然你能够能够直接在java中使用这个类,
1 |
import groovy.lang.Binding; |
2 |
import groovy.lang.Script; |
3 |
4 |
public class UseFoo { |
5 |
public static void main(String[] args) { |
6 |
// lets pass in some variables |
7 |
Binding binding = new Binding(); |
8 |
binding.setVariable( "cheese" , "Cheddar" ) |
9 |
binding.setVariable( "args" , args) |
10 |
11 |
Script foo = new Foo(binding); |
12 |
foo.run(); |
13 |
} |
14 |
} |
其实在上面这里不必使用Binding,由于Foo 有一个无参的构造函数,尽管使用Binding 咱们可以更加容易的传递参数。
相比起类来讲,在groovy脚本中,变量不须要申明(def),在脚本中变量的引用将自动建立并放入Binding中。
在groovy脚本中,为了编写一个方法,不必像java同样必须先定义一个类,
可是和传统的基于class的groovy而言,在类外定义函数须要使用def关键字。可是若是你须要一些好比static或者实例变量等等的东西的时候,最好写一个类。
下面给出了一个例子:
1 |
def foo(list, value) { |
2 |
println "Calling function foo() with param ${value}" |
3 |
list << value |
4 |
} |
5 |
6 |
x = [] |
7 |
foo(x, 1 ) |
8 |
foo(x, 2 ) |
9 |
assert x == [ 1 , 2 ] |
10 |
11 |
println "Creating list ${x}" |