1.默认导入
下面的导入列表总是隐藏在Groovy代码之中:
groovy.lang.*; groovy.util.*; java.lang.*; java.io.*; java.math.BigDecimal; java.math.BigInteger; java.net.*; java.util.*;
如果还需要引入其他的java类,则可以直接使用java中的import语句进行导入,如java.math.*;
2.数字处理
Groovy在底层用Java中的BigDecimal表示浮点数,但它会确保BigDecimal的行为尽量符合开发人员的期望。
3.变量、动态与静态类型、作用域
(1)动态与静态类型
Groovy是动态语言,所以不必指定变量的类型,变量的类型是在声明(或返回)时确定的。
如果声明了静态类型变量,在用不不正确的类型值对它赋值时,Groovy能检查出来,运行如下代码,会报错
a=new Date() a=1; Date b=new Date(); b=2.0;
Exception thrown org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '2.0' with class 'java.math.BigDecimal' to class 'java.util.Date' at ConsoleScript4.run(ConsoleScript4:4)
也就是在b=2.0;这一句执行报错,不能将2.0这个值赋给Date型的变量b。
(2)Groovy中的作用域
对于Groovy里的类,其作用域和Java一样,类、方法、循环作用域的变量,他们的作用域都跟你想的一样。但Groovy脚本则不同。
简单说,Groovy脚本有两种作用域
- 绑定域,绑定域是脚本的全局作用域。
- 本地域,本地域就是变量的作用域局限于声明它们的代码块。对于在脚本代码块内声明的变量(比如在脚本的顶部),如果是定义过的变量,其作用域就是定义它的本地域。
定义变量是指被声明为静态类型,或用特殊的def关键字定义的变量(表明它是未确定类型的定义变量)。
在脚本中声明的方法访问不了本地域。
String hello="Hello World"; void printHello() { System.out.println(hello); } printHello();
将会出现如下异常:
Exception thrown groovy.lang.MissingPropertyException: No such property: hello for class: ConsoleScript6 at ConsoleScript6.printHello(ConsoleScript6:4) at ConsoleScript6.run(ConsoleScript6:6)
但如果去掉String,则可以正常输出Hello World.
(3)列表和映射语法
Groovy中的列表和映射在底层是由Java ArrayList和LinkedHashMap实现的。
Groovy用方括号[]指定和使用列表结构.
jvmLanguages=["Java","Groovy","Scala","Clojure"]; println(jvmLanguages[0]); println(jvmLanguages.size()); println(jvmLanguages[0..2]) println(jvmLanguages[-1]) jvmLanguages=[]; println(jvmLanguages);
输出为:
Java 4 [Java, Groovy, Scala] Clojure []Groory是动态类型语言,所以可以把不同类型的只保存在列表和映射中。
jvmLanguages=["Java",2,"Scala",new Date()]; println(jvmLanguages);
输出为:
[Java, 2, Scala, Mon Jan 05 14:22:22 CST 2015]
Groovy处理映射也差不多,用[]符号,并用冒号(:)来分开键值对,以映射.键(map.key)的方式去引用映射中的值。
languageRatings=[Java:100,Groovy:99,Clojure:"null"]; println(languageRatings["Java"]); println(languageRatings.Clojure) languageRatings["Clojure"]=75; println(languageRatings["Clojure"]); println(languageRatings); languageRatings=[:]; println(languageRatings);
输出为:
100 null 75 [Java:100, Groovy:99, Clojure:75] [:]
4.与Java差异
(1)Groovy有大量可以省略的语法:
- 语句结束处的分号;
- 返回语句(return);
- 方法参数两边的括号;
- public访问限定符。
Demo demo=new Demo(); println(demo.doSomething()); public class Demo { public Integer doSomething() { def x=1 def y;def String z="Hello World" println "the doSomething method be invoked!" x=5 } }
输出为:
the doSomething method be invoked! 5如果把上面代码中的public都去掉,输出还是一样
(2)异常处理
Groovy不区分检查异常和未检查异常。Groovy编译器会忽略方法签名中的所有throws语句。
(3)相等操作符
遵循最小以外原则,Groovy把==当做Java中的equals()方法。
Integer x=new Integer(2); Integer y=new Integer(2); Integer z=null; if(x==y) { println "x==y" } if(!x.is(y)) { println "x is not y" } if(z.is(null)) { println "z is null" } if(z==null) { println "z is null" }
输出为:
x==y x is not y z is null z is null
(4)内部类
Groovy支持内部类,但大多数情况下我们应该用函数字面值替代它。
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
对Groovy开发环境设置,基本语法做了简单明了的介绍
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
Groovy语法&Gradle配置学习笔记
groovy基础语法.pdf
groovy基础语法.doc,学习groovy入门级资料
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
图文并茂,适合入门新手,涵盖了基本的语法讲解及一些DEMO测试,值得一看
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
中文版的 某个人总结的基本语法 网上搜出来的 感觉还算过得去 可当做groovy入门
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。
Groovy_笔记
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。
Grails Groovy 学习必备参考资料
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。
很好的学习Groovy的学习资料, 很实用。。 个人感觉Groovy是Java敏捷开发的首选。
本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。