`
jboy
  • 浏览: 8545 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Groovy和Java的区别

阅读更多

 

英文原文 http://groovy.codehaus.org/Differences+from+Java

 

Groovy和Java的区别

 

Groovy尝试使Java开发人员尽可能地觉得自然。在设计Groovy时,我们一直努力遵循“最少惊奇”的原则,尤其是对学习Groovy的那些有Java背景的开发人员。

 

在这里,我们列出了所有的Java和Groovy之间的主要区别。

 

默认的Imports

 

默认情况下,下面这些包和类都被导入了,也就是说,你没有必要使用一个显式的导入语句来使用它们:

 

java.io.*

java.lang.*

java.math.BigDecimal

java.math.BigInteger

java.net.*

java.util.*

groovy.lang.*

groovy.util.*

 

常见的问题

 

在这里,我们列出了一些常见的问题。 如果你是一个Java开发人员并开始使用Groovy,你可能会迷惑。

 

 

  • ==是比较任何类型相等的手段。在Java中有一个奇怪的语法,==意味着相等的原始类型和对象的同一性。自从我们使用了自动装箱,这将是非常容易迷惑Java开发人员的一件事(因为x == 5多半是false,如果x是5 - 5会被自动包装成Integer对象),所以为了简单起见,==在Groovy中表示equals(),如果你真的需要的表示同一性,你可以使用方法“is”,像这样foo.is(bar)。但是对于null这并不工作,但你仍然可以使用foo==null来判断。
  • in 是一个关键字。所以,不要把它作为一个变量名。
  • 声明数组时,你可以不写 int[] a = {1,2,3}; 你需要写成 int[] a = [1,2,3]
  • 如果你习惯于这样来写一个for循环 for (int i=0; i < len; i++) {...}
  • 但是在Groovy中,你仍然可以使用,但你也可以只使用一个计数变量,换成下面的写法:
  • for (i in 0..len-1) {...} 或 for (i in 0..<len) {...} 或 len.times {...}

 

注意事项

 

 

  • 分号是可选的。如果你喜欢可以继续使用他们(如果把几个语句放在在同一行那么你必须使用他们)。
  • return关键字是可选的。
  • 您可以在静态方法中使用this关键字(表示这个类)。
  • 默认情况下,方法和类是public的。
  • protected在Groovy和Java中具有相同的含义。也就是说,同一个包的类和派生类也可以看到protected的成员。
  • 不支持内部类(非静态嵌套类)。在大多数情况下,你可以使用闭包代替,例如实现接口。支持静态嵌套类。
  • Groovy编译器不检查方法签名中的throws子句,因为在Groovy看来checked和unchecked异常之间没有什么区别。
  • 使用未定义的变量,或传递错误类型的参数不会得到编译错误,不像在Java中。请参阅Runtime vs Compile time, Static vs Dynamic.

 

陷阱

 

Java程序员习惯使用分号终止语句,并且Java没有闭包。而且在类定义中有实例的初始化。所以,你可能会看到类似的代码:

class Trial {

  private final Thing thing = new Thing ( ) ;

  { thing.doSomething ( ) ; }

}

许多Groovy程序员会避免使用分号因为他们分散并且冗余(虽然也有一部分人一直使用分号 - 这是一个编码风格的问题)。如果用Groovy的写法重写上面的代码会导致一个问题:

class Trial {

  private final thing = new Thing ( )

  { thing.doSomething ( ) }

}

这将抛出一个MissingMethodException!

 

这里的问题是,在这种情况下,换行符并没有结束语句,所以下面的程序段被视为一个闭包,作为一个参数传递的Thing的构造方法。很奇怪但却是事实。如果你想使用这种方式的实例初始化,分号是强制性的。

class Trial {

  private final thing = new Thing ( ) ;

  { thing.doSomething ( ) }

}

这种方式下{}显然是一个实例初始化块的定义。

 

另一份文件列出了一些你应该知道的陷阱,并给出一些关于最佳实践的建议,以避免这些陷阱。

 

Java中没有但是Groovy有的功能

 

 

  • 闭包
  • list和map的内建语法
  • 支持GroovyMarkup和GPath
  • 原生支持正则表达式
  • 多样化的迭代和强大的switch语句
  • 支持动态和静态类型 - 因此你可以忽略的方法,字段和变量的类型声明
  • 在字符串中嵌入表达式
  • 许多新的辅助方法添加到JDK中
  • 简单的语法编写bean属性和添加事件监听器
  • 使用?运算符安全引用,例如"variable?.field"和"variable?.method()"- 不会再有很多检查null的if堵塞你的代码了

 

附: 本文中值得一看的超链接:

  • 闭包的介绍 - http://groovy.codehaus.org/Closures+-+Informal+Guide
  • 闭包实现接口 - http://docs.codehaus.org/display/GROOVY/Groovy+way+to+implement+interfaces
  • 最佳实践 - http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undone

 

分享到:
评论

相关推荐

    groovy和Java相互调用1

    Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    groovy与java的区别1

    groovy 和 java 的区别写法上:非常随意,没有 java 那么多的限制,例如 不用写逗号,return 可写 可不写,可以直接当做脚本来写,main

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Java中使用Groovy的三种方式

    Java中使用Groovy的三种方式,详细见我的博客。

    Java Groovy结合使用

    概述主要介绍Java、spring与groovy结合使用,高清英文版本

    精通 Groovy--下一代开发语言

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java ...Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)

    Java调用Groovy,实时动态加载数据库groovy脚本

    Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署

    groovy调用java-se类库学习案例 Java学习资料

    groovy-se-study 本工程用于学习groovy和java-se的调用

    Groovy v2.4.13官方版

    Groovy 是用于Java虚拟机的一种敏捷的动态语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多...

    java 动态脚本语言 精通 Groovy

    java 动态脚本语言 精通 Groovy

    Java Groovy

    Making Java Groovy

    Making Java Groovy源码

    Making Java Groovy Kenneth A. Kousen 1.Easier Java 2.Closures, builders, and metaprogramming 3.Gradle for builds, Spock for testing 4.Groovy frameworks like Grails and Griffon 源码

    SpringBoot-Gradle-Maven-Java-Groovy

    SpringBoot-Gradle-Maven-Java-Groovy:SpringBoot通过不同构建工具和语言实现。

    apache-groovy-sdk-2.4.11

    了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...

    Learning.Groovy.3.Java-Based.Dynamic.Scripting.2nd.Edition (英文版pdf)

    And, this book covers how Groovy supports Java type annotations and more. There is more to Groovy than the core language, so Learning Groovy 3, Second Edition covers the extended Groovy ecosystem. ...

    Making Java Groovy--Kenneth.A.Kousen

    Making Java Groovy--Kenneth.A.Kousen. Java Groovy 很不错的学习资料

    hugo110-java_run_groovy-master_java_

    java运行groovy 环境,搭建方便自己练习groovy使用 与后续定时调度动态代码做准备

    Groovy API docs 2.4.15 (CHM格式)

    (注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程。 如果文件打开看不到右边的内容,是因为你的操作系统为了安全对下载的chm文件进行了锁定,只需要在打开前右键单击该chm文件选择“属性”,然后在...

    apache-groovy-sdk-3.0.9.zip

    了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...

Global site tag (gtag.js) - Google Analytics