在groovy中定义类和java中是一样的。类的方法可以是static,也可以是非static的。

groovy中的方法可以是public, protected, private,同时也支持java中的修饰符,比如synchronized。

在groovy中导入包或者导入类,语法和java是一样的。只不过在groovy中默认已经导入了下面的package:

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的。

每一个groovy类,在JVM层级,都是字节码形式的java code,所以在java代码中可以调用groovy中申明的方法,反之亦然。

你可以指定方法的参数和返回值,以便他们能够更好的和java代码相互调用。当然你也可以实现接口或者重载方法。但是需要你没有指定方法后者属性的类型的话,那么在JVM层级的字节码中,他们将会是 java.lang.Object 类型。

比如:

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脚本:

1 println "Nice cheese Gromit!"

如果你是要groovyc来编译上面的代码的话,假设你这个脚本的名字为Foo.script,那么你就会获得 Foo.class文件。

你可以在命令行运行下面的代码,假设你的classpath中包含:groovy.jar and asm.jar.

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}"
 

groovy-脚本和类的更多相关文章

  1. Groovy中的脚本与类

    包名 当你在groovy中定义类的时候需要指定包名,这和java中类似不多介绍. 导入 groovy中的导入也跟java类似,有一下五种: 默认导入 groovy默认导入了一下几个包和类: impor ...

  2. IDEA使用 live template添加groovy脚本给方法,类,js方法添加注释(转载)

    IDEA添加Live Template: File->Setting->Editor->Live Templates Abbreviation: * Template text: * ...

  3. JAVA嵌入运行Groovy脚本

    摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...

  4. 即时编译和打包您的 Groovy 脚本(转)

    在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class ...

  5. 180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行

    Quick-Task 动态脚本支持框架之Groovy脚本加载执行 上一篇简答说了如何判断有任务动态添加.删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判 ...

  6. 【java web】java运行预编译Groovy脚本

    在JVM中执行Groovy类有两种方式: 使用Groovy编译全部的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类载入器来载入这些类. 通 ...

  7. excel文件的groovy脚本在SoapUI中进行数据驱动测试

    SoapUI Pro具有从外部文件读取数据的功能,例如:excel,csv等.但SoapUI不提供从excel文件读取数据的功能.因此,为了从SoapUI中的excel文件中读取数据,我们需要在gro ...

  8. Groovy脚本基础全攻略

    1 背景 Groovy脚本基于Java且拓展了Java,所以从某种程度来说掌握Java是学习Groovy的前提,故本文适用于不熟悉Groovy却想快速得到Groovy核心基础干货的Java开发者(注意 ...

  9. 复杂多变场景下的Groovy脚本引擎实战

    一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚本引擎 了解Groovy的基本原理和Java如何集成 ...

  10. Java和Groovy脚本互相调用实例

    本实例是GODU动态脚本的一个技术简化版,演示了java调groovy,groovy又调java的运行过程. 测试用例: package com.boco.godu.integration; impo ...

随机推荐

  1. AndroidStudio .gitinore编写

    # Built application files *.apk *.ap_ # files for the dex VM *.dex # Java class files *.class */R.ja ...

  2. Download the WDK, WinDbg, and associated tools

    Download the WDK, WinDbg, and associated tools This is where you get your Windows Driver Kit (WDK) a ...

  3. VMWare安装苹果操作系统OS X

    项目要求做一些简单的苹果开发尝试,由于苹果的各种开发要求在Macintosh机上进行,可是项目不值得为一次简单的尝试付出过多的购机费,所以只能另辟蹊径,跟别人学学怎么在虚拟机里面搞: http://j ...

  4. C# 【无法修改XX返回值,因为它不是变量】

    using UnityEngine; using System.Collections; using System.Xml.Linq; using UnityEditor; using System; ...

  5. [vim]vim 在win下乱码解决

    vim在win下遇到汉字乱码早就知晓,本以为通过如下设置即可解决乱码问题 set encoding=utf-8 set fileencoding=utf-8,chinese 这样设置是可以解决源码文件 ...

  6. 从0开始学Java——JSP&Servlet——Tomcat和Apache的区别

    从<JSP & Servlet 学习笔记>的第一章,了解到web容器:“Web容器是Servlet/jsp唯一认得的http服务器”. 在Java中,容器的类型有多种,这里要说的是 ...

  7. 5332盛照宗 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  8. Asp.Net MVC 合并js或css请求

    Step1:BundleConfig中注册 bundles.Add(new ScriptBundle("~/isValid").Include(  "~/Scripts/ ...

  9. PHP Yii2.0(一):环境搭建 & 问题集锦

    第一节 简单认识版本的异同 (1)版本说明 在安装和使用之前,我们需要知道 PHP Yii 有两个不同的版本(Yii 1.*或者Yii 2.*),这两个版本的目录结构不一样,其具体使用方式差异较大,因 ...

  10. 学习笔记:Twitter核心数据类库团队的Hadoop优化经验

    一.来源 Streaming Hadoop Performance Optimization at Scale, Lessons Learned at Twitter (Data platform @ ...