您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Groovy中文教程
开始Groovy1.使用入门你可能急着的编写一些Groovy代码,对吧?好的,首先,你必须安装Groovy.在这章,我将告诉你如何快速安装Groovy并确保一切在你的系统上运行良好.1.1使用Groovy获取稳定的Groovy版本非常简单:只要浏览Groovy主页点击Download链接。你可以下载binaryrelease或者sourcerelease。假如你想在自己的电脑上构建Groovy或者想研究它的源代码可以下载sourcerelease。否则,推荐你下载binaryrelease(假如你使用的是Windows,你可以下载Windows安装版本,但我建议获取binaryrelease自己来设置必要的环境)。同时你需要JDK1.4或最新的(see).假如你想体验Groovy内Java5支持功能,我建议至少JDK1.5。最后,确定你已经安装了Java。Java笨狗-----Groovy1.2安装Groovy在下面的章节里,我假设你已经下载了Groovy1.5.7并已经安装了JDK.在Windows安装Groovy假如你下载的是Windows安装版本,运行它,按照指示安装。假如你下载的是binaryrelease,解压.把groovy-1.5.7复制到一个你想要的位置。比如,我的Windows系统:C:\groovy-1.5.7.下面就是设置GROOVY_HOME和Path环境变量.编辑你的系统环境变量(这里的位置就不要我说了吧,如果不会的话,去看下Java怎么设置).创建环境变量并命名为GROOVY_HOME,并设置成你的Groovy安装路径(例如,我设置成C:\groovy-1.5.7.).同样,在Path中设置为%GROOVY_HOME%\bin.注意使用(;)分隔你的环境变量.接下来,配置的JAVA_HOME为你的JDK目录(假如你还没有设置).Java笨狗-----Groovy在Unix-like系统安装Groovy解压你下载的binaryrelease.把groovy-1.5.7复制到一个你想要的位置.例如:我的Mac系统,/opt/groovy目录.下一步是设置GROOVY_HOME和Path环境变量.根据你所使用的shell,你必须编辑不同的配置文件.我使用bash,因此,编辑~/.bash_profile文件.在这个文件里,我添加了GROOVY_HOME=/opt/groovy/groovy-1.5.7来设置GROOVY_HOME环境变量.同样在Path中添加$GROOVY_HOME/bin环境变量.接下来就是配置JAVA_HOME(这里不再介绍)Java笨狗-----Groovy1.3试运行UsinggroovyshOK,你已经安装了Groovy,为了检测安装是否正确可以使用命令行工具groovysh.打开Window命令提示符,键入groovysh;将看到下图的内容:Java笨狗-----Groovy1.4使用groovyConsole假如你不喜欢命令行而是喜欢GUI,—那么在Windows下双击groovyConsole.bat(在%GROOVY_HOME%\bin目录下能找到他).如果是Unix-like系统可以双击groovyConsole执行脚本.一个控制台GUI弹出,如图:在上面的控制平台窗口输入些代码,在Windows系统上可以按下Ctrl+R或者Ctrl+Enter(Mac系统上Command+R或者Command+Enter)执行代码.你也可以使用工具条上的按钮执行脚本.使用时间长后你便会喜欢上groovyConsole—你可以保存你的脚本,打开已存在的脚本等等,,所以可以花些时间来研究它Java笨狗-----Groovy2.GroovyfortheJavaEyes在这章我会帮助你轻松的认识Groovy.首先,从熟悉的Java然后再转换到Groovy的写法。由于Groovy保留Java语法和语义,你可以随时混合Java样式和Groovy样式.现在开始我们的Groovy之旅.2.1从Java到GroovyGroovy能直接接受你的Java代码.因此,从一段你熟悉的代码开始,但是通过Groovy运行.当你工作时,你将发现做同样事情的代码,使用Groovy方式来书写后非常小巧.Hello,Groovy这是Java代码同样也是Groovy代码://JavacodepublicclassGreetings{publicstaticvoidmain(String[]args){for(inti=0;i3;i++){System.out.print(ho);}System.out.println(MerryGroovy!);}}FRO默认导入在你书写Groovy代码时没有必要导入一些公用的类/包.例如,Calendar直接指向java.util.Calendar.Groovy自动导入以下Java包:java.lang,java.util,java.io,和java.net.它同样也导入了java.math.BigDecimal和java.math.BigInteger.另外,Groovy的groovy.lang和groovy.util包也被导入.Java笨狗-----Groovy下面是上面代码的输出:hohohoMerryGroovy!如此简单的工作,却需要这么多代码.然而,Groovy会乖乖的接受并运行它.以Greetings.groovy的文件名保存上面的代码,使用命令groovyGreetings来执行.其实,你可以去除上面程序的大部分代码并得到相同的结果.第一步,先去除上面的分号.去除分号不仅可以减少干扰同时帮你使用Groovy实现内部DSLs(后面会介绍DSLsinGroovy).然后再删除类和方法的定义.for(inti=0;i3;i++){System.out.print(ho)}System.out.println(MerryGroovy!)你可以更进一步.Groovy知道println()因为它已经被添加到java.lang.Object.它同样有轻巧的For循环格式(使用Range对象---Groovy有宽松的圆括号).因此上面的代码可以减少成这样:for(iin0..2){print'ho'}println'MerryGroovy!'这个输出和你一开始的Java代码是相同的,只是这里的代码更加简洁.Java笨狗-----Groovy2.2循环方式在Groovy中你不局限于传统的For循环.你已经在For循环中使用了range0..2.别急,还有更精彩的.Groovy已经在java.lang.Integer中添加了便捷的upto()实体方法,因此,你可以像下面这样使用这个方法:0.upto(2){print$it}这里,你用Integer实体0调用upto().上面代码的输出:012upto()方法接受一个闭包作为参数.假如闭包只有一个参数,在Groovy中可以使用默认名it代表这个参数.记住这点,我将在后面章节讨论如何使用Closures(闭包).变量前的$告诉println()打印出变量的值,而不是变量的字符“it”—允许你嵌入到strings,你将在后面章节了解到upto()方法允许你设置上下界限.假如你从0开始,你还可以使用times()方法,如下:3.times{print$it}代码输出如下:012如果你想在循环的时候跳读值,可以使用step()方法:0.step(10,2){print$it}代码输出如下:02468你已经在实践中看到了简单的循环.你同样可以在集合的对象中使用简单的迭代和横切方法,你将在后面的章节看到更进一步,你可以重写greetings实例使用早前学过的方法.看看Groovy是如何简化在开始时的Java代码:3.times{print'ho'}println'MerryGroovy!'代码输出如下:hohohoMerryGroovy!Java笨狗-----Groovy2.3快速查看GDKGroovy扩展的JDK被称为GDK2或者GroovyJDK.在Java中,你可以使用java.lang.Process与系统级进程相互作用.假如你在代码中调用SubversionHelp://Javacodeimportjava.io.*;publicclassExecuteProcess{publicstaticvoidmain(String[]args){try{Processproc=Runtime.getRuntime().exec(svnhelp);BufferedReaderresult=newBufferedReader(newInputStreamReader(proc.getInputStream()));Stringline;while((line=result.readLine())!=null){System.out.println(line);}}catch(IOExceptionex){ex.printStackTrace();}}}java.lang.Process非常有用,但是GDK,却使它意想不到的简单:printlnsvnhelp.execute().text比较两段代码.那段代码你会更喜欢了?当你在String实体上调用execute()时,Groovy创建一个继承自java.lang.Process的实体,就如在Java代码中Runtime的exec()方法:printlnsvnhelp.execute().getClass().name在Unix-like机器上的输出:java.lang.UNIXProcess在Windows机器上的输出:java.lang.ProcessImpl当你调用text,你将在Process中调用Groovy添加的方法getText()来读取进程的整个标准,并把结果输出进一个String中.来吧,试下你上面的代码.假如你没有使用Subversion,而是使用groovy-v来代替:printlngroovy-v.execute().textJava笨狗-----Groovy输出:GroovyVersion:1.5.4JVM:1.6.0_01-41-release上面代码在Unix-like系统和Windows都能正常工作.类似的,在Unix-like系统,获取当前目录列表,你可以调用ls:printlnls-l.execute().text如果是Windows,用dir替代ls将无法工作.原因是ls是Unixlike系统的程序,而dir却不是一个程序—它只是一个shell命令.因此,你必须调用cmd,然后要求它执行dir命令:printlncmd/Cdir.execute().text在这节,你只不过是接触到GDK的表面.在后面的章节还会接触更多的GDK.Java笨狗-----Groovy2.4安全导航操作符安全导航操作符(?.).消除普通的null检查:deffoo(str){//if(str!=null){returnstr.reverse()}str?.reverse()}printlnfoo('evil')printlnfoo(null)FROMJAVATOGROOVY43foo()方法中的?.操作符当str不为null时才调用str.reverse().输出如下:livenull在null对象上使用?.来替代NullPointerException.另一个用处是异常处理.在Java中会强迫你进行异常处理检查.考虑一个简单的案例:当你调用Thread的sleep()方法.Java强迫你捕获java.lang.InterruptedException.这导致了大量空的catch块://Javacodetry{Thread.sl
本文标题:Groovy中文教程
链接地址:https://www.777doc.com/doc-4583036 .html