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}"
相關文章
相關標籤/搜索