groovy-脚本和类

在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 == [12]
10  
11 println "Creating list ${x}"
相关文章
相关标签/搜索