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. **语法简洁**: Groovy的语法比Java更为简洁,它支持面向对象编程,并且具有闭包和函数式编程的特点。 2. **动态类型**: Groovy是动态类型的,这意味着在编译时不需要声明变量的类型,类型会...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...
通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...
- **基础语法**:理解Groovy的基本数据类型、流程控制结构、方法定义等。 - **闭包和元编程**:深入学习Groovy的两大特色,掌握闭包的使用场景和元编程的应用。 - **Gradle入门**:学习如何创建Gradle项目,配置...
Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless ...
7. **动态语言支持**:JDK 7引入了 invokedynamic 指令,这是Java虚拟机的四大基础操作之一,用于支持动态类型语言的实现,如Groovy和JRuby。 8. **异常链**:JDK 7允许在捕获异常时保留原始异常信息,形成异常链,...
**Java JDK 7学习笔记概述** Java JDK 7(Java Development Kit 7)是Java编程语言的一个重要版本,由Sun Microsystems(后被Oracle公司收购)开发,并于2011年7月28日正式发布。这个版本引入了一系列新特性、改进...
**Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...
Java 6.0是Oracle公司推出的Java开发工具集(JDK)的一个重要版本,它在Java 5.0的基础上进行了一...此外,由于还包含了"jdk 5.0学习笔记",读者也可以对比学习,了解两个版本之间的差异,进一步巩固Java编程的基础。
《良葛格java jdk 5.0学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者...通过深入阅读《良葛格java jdk 5.0学习笔记》,并结合实践,初学者可以快速掌握Java编程,为进一步的学习和发展奠定坚实的基础。
《The definitive Guide To Grails学习笔记》是一份深入探讨Grails框架的重要资源,它源于经典书籍《The Definitive Guide to Grails》的精华总结。Grails是一种基于Groovy语言的开源Web应用框架,旨在提高开发效率...
通过"Java JDK 6学习笔记——ppt简体版",学习者可以系统地学习到如何使用JDK 6进行开发,包括环境配置、基本语法、类库使用、异常处理、IO流、网络编程、多线程等各个方面。PPT格式通常直观易懂,便于快速理解和...
"Griffon学习笔记1 - HelloWorld"这篇博文可能是博主在介绍如何使用Griffon框架创建一个简单的"Hello, World!"应用程序,这通常是学习新开发工具的第一步。 1. **Griffon框架**:Griffon是由Pivotal Software开发的...
**Griffon学习笔记2 - 显示数据列表** Griffon是一款基于Groovy和Java的桌面应用程序框架,它提供了一种简洁的方式来构建GUI应用,同时利用了Java平台的广泛库支持。这篇学习笔记主要关注如何在Griffon应用中展示...
在Groovy-chenyun2000-mht.rar压缩包里的"MHT"文件可能是Groovy或Grails相关的教程、讲座笔记或者案例研究,用户可以离线阅读这些资料,深入理解Groovy语言和Grails框架。 Groovy的主要特点包括: 1. **简洁语法**...