Groovy和Java的相同点有:
3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+
+表示Groovy不但涵盖了Java的语法,而且还有增强部分。
Groovy和Java的不同点有:
0, 1, 2, 5, 7, 9, 11, 16, 17, 19, 24, 25, 26, 27
下面所列序号不分先后顺序:
0. 在Groovy可以用def定义无类型的变量(定义变量方面def与JavaScript中的var相似),和返回值为无类型的方法,而在Java中没有def。
Groovy:
引用
class Man {
def name = "山风小子"
def introduce() {
return "I'm $name" // return可以省略
}
}
1. Java中的equals方法对应Groovy中的== , 而Java中的==(判断是否引用同一对象)对应Groovy中的is方法。
eg.Test1.java :
public class Test {
public static void main(String[] args) {
String name1 = "山风小子";
String name2 = new String("山风小子");
// Groovy中写为 name1 == name2
if (name1.equals(name2)) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
// Groovy中写为 name1.is(name2)
if (name1 == name2) {
System.out.println("identical");
} else {
System.out.println("not identical");
}
}
与Test1.java相对应的。
Test1.groovy :
引用
String name1 = "山风小子" // 你也可以这样写: def name1 = "山风小子" 其中的def可以理解为JavaScript中定义变量的var
String name2 = new String("山风小子") //请注意Groovy的句尾的分号时可选的, 即可要可不要,前提是一行代码一条语句
// Java中写为 name1.equals(name2)
if (name1 == name2) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
// Java中写为 name1 == name2
if (name1.is(name2)) {
System.out.println("identical");
} else {
System.out.println("not identical");
}
2. Java中的数组定义int[] a = {1, 2, 3}; 在Groovy写成int[] a = [1, 2, 3]
3. Java中的for循环for (int i = 0; i < len; i++) {...} 在Groovy中还可以写成for (i in 0..len-1) {...} 或者 for (i in 0..
for (int i =0; i < len; i++) {
// do something
}
groovy:
引用
for (int i =0; i < len; i++) {
// do something
}
// 或者
for (i in 0..len-1) {
// do something
}
// 或者
for (i in 0..
4. Java中的方法返回写为return; 或者return obj; 在Groovy的方法中return是可选的。
public String sayHello() {
return "Hello, 山风小子";
}
groovy:
引用
public String sayHello() {
return "Hello, 山风小子"
}
//或者
public String sayHello() {
"Hello, 山风小子"
}
//或者
String sayHello() {
"Hello, 山风小子"
}
//或者
public sayHello() {
"Hello, 山风小子"
}
// 或者
def sayHello() {
"Hello, 山风小子"
}
5. Java中的inner class即内部类,在Groovy中用Closure实现(Closure是Java7正在考虑的一个特性,比inner class在语义方面更完善)。
6. Groovy中的注释比Java多了首行注释#!,其他与Java相同比如单行注释:// 多行注释:/* */ 或者是 支持javadoc的/** */
/*
* 多行注释
*/
/**
* javadoc 注释
*/
// 单行注释
}
groovy:
引用
#! 首行注释,使Unix shell能够定位Groovy启动程序以运行Groovy代码,例如
#!/usr/bin/groovy
/*
* 多行注释
*/
/**
* javadoc 注释
*/
// 单行注释
}
7. Java5中的for-each:for (Type t : iteratable) {...} 在Groovy中,for (t in iteratable) {...}
for (Type t : iterable) {
// do something
}
groovy:
引用
for (t in iterable) {
// do something
}
8. Groovy中switch语句与Java中相同,不过支持更多类型了,比如String。
9. Groovy的while语句跟Java相同,但废弃了do-while (考虑到语义方面的问题,而且do-while可以用其他形式的循环语句代替,使用频率低)。
10. Java中的String常量表示为"Hello, 山风小子",在Groovy中可如下表示 :
引用
// 双引号
"Hello, 山风小子"
// 单引号也可以
'Hello, 山风小子'
//多行字符串
"""Hello,
山风小子"""
//或者
''Hello,
山风小子
''
// 替代字符串
def name = "山风小子"
"Hello, ${name}"
//或者
"Hello, $name"
11.在Groovy中定义类,定义方法与Java中定义类相同,唯一区别在于Groovy中类,属性以及方法默认都是public的,而在Java中默认是package的,另外,在Groovy中可以用def来定义方法,请看注释。
public class Hello {
private String name = "山风小子";
public void sayHello() {
System.out.println("Hello, " + name);
}
}
groovy:
引用
class Hello {
private String name = "山风小子"
public void sayHello() {
//println与Java中System.out.println()相同
println "Hello, $name"
}
/* sayHello也可以这样定义
def sayHello() {
println "Hello, $name"
}
*/
}
12.对象创建在Java写为Thought t = new Thought(); 在Groovy也可以这样写,不过还多了种写法:
引用
def t = new Thought();
13.静态方法调用在Java和Groovy中相同,即
引用
ClassName.staticMethodName();
14.实现接口和继承父类方面Groovy也与Java完全相同,即实现接口
引用
class ClassName implements InterfaceName {...}
继承父类:class ClassName extends SuperClass {...}
15.定义接口方面Groovy与Java完全相同,即interface InterfaceName {...} //在Groovy中默认为public的
16.正则表达式常量在Java中没有,在Groovy中表示为 /pattern/
17.Hash常量(类型为java.util.HashMap)在Java没有,在Groovy中表示为
引用
def frequence = ["the": 5, "hello": 2, "world": 2]
18.类变量即static变量,Groovy与Java相同,static String name = "山风小子",在Groovy也可写为static name = "山风小子"
19.在varargs方法方面,Groovy与Java稍有区别,如下所示:
// Java:
public void varargsMethod(Type args) {
//do something
}
groovy:
引用
def varargsMethod(Type[] args) {
//do something
}
20.引用当前对象,Groovy和Java相同,在Java中用this表示,在Groovy中也用this表示,而且在Groovy中,this可以出现在static范围中,指向所在类的类对象,本例中,this等同于ThisInStaticScope.class(Java写法)或ThisInStaticScope(Groovy写法)
引用
class ThisInStaticScope {
static {
println this
}
// 请不要诧异,参数类型可以省略。如果方法声明中有修饰关键字比如public,synchronized,static等,则返回值类型可以省略。
static main(args) {
println this
}
}
21.子类中调用父类方法,Groovy和Java也相同,在Java中 super.methodName() ,在Groovy中 super.methodName()
22.命名空间的定义,Groovy和Java相同,在Java中 package edu.ecust.bluesun; 在Groovy中 package edu.ecust.bluesun (分号可省略)
23.在导入类方面,Groovy和Java相同,
在Java中 import edu.ecust.bluesun.GroovyTest;
在Groovy中 import edu.ecust.bluesun.GroovyTest
24.List常量(类型为java.util.ArrayList)在Java中没有, 在Groovy中表示为
引用
def list = [3, 11, "Hello", "山风小子", "!"]
25.在异常处理方面,Groovy与Java相同,除了不强制程序员捕获检查异常(checked exception)外 (这跟C#很像,如果我没记错的话
并且在方法声明时,也可以不写throws语句。
26.方法的默认参数,Java中没有,Groovy中表示如下:
引用
class Hello {
//如果没有参数传入,默认打印出 Hello, 山风小子
def greet(name="山风小子") {
println("Hello, $name") //也可省略括号()
}
}
27.在Groovy中,语句如果单独占一行的话,句尾的分号(;)可以省略,而在Java中每条语句后面必须跟有分号(;)
28.在Groovy中,如果不是Boolean或boolean类型,非null或非空(空字符串,[],[:])为true,null为false,而Java中对象不可以表示true或false;如果是Boolean或boolean类型,与Java中的一样。
29.在Groovy中,万事万物都是对象!而Java中不是这样,基本类型(primitive type)就不是对象。
30.在Java中,Class对象表示为ClassName.class,而在Groovy中,可以直接用ClassName表示Class对象
31.Groovy 会自动导入java.lang.*, java.util.*, java.net.*, java.io.*, java.math.BigInteger, java.math.BigDecimal, groovy.lang.*, groovy.util.*,而Java则只自动导入java.lang.*
32.Groovy不仅有? :三元操作符,还有?:两元操作符,但Java只有? :三元操作符。
引用
def a = null;
// 如果a为null,那么结果为?:之后的那个值; 如果不为null,那么结果就是a
def result = a ?: "default result"
println result
a = "山风小子"
result = a ?: "default result"
println result
由上可知, Groovy几乎完全兼容Java的语法,难怪‘江南白衣’称Groovy是Java的‘私生子’;但由于Groovy不仅借鉴了Java 95%以上的特性,而且还借鉴了许多卓越的动态语言,比如Python, Ruby等,使Groovy成为极其高效敏捷的编程语言,而不仅仅是Java的副本。所以其实Java++可以作为Groovy的别名,即具有动态特性的 Java。
最后,我想补充一句:Groovy的特性远不至所列的这些,比如还有Mixins, builder系列:MarkupBuilder,SwingBuilder等,很多都是Groovy中有而Java中没有,因此就不一一列举了,想继续深入学习Groovy,可访问Groovy官方网站:http://groovy.codehaus.org ,里面有很多例子和教程供大家参阅,也可以参考在下的Groovy高效编程系列(其中一些是在下的笔记)。网上也有《Groovy In Action》电子书下载,大家不妨搜一下。
分享到:
相关推荐
学Groovy,Grails 与学Java一样,在实战之前需要搭建开发环境,您可以在 Groovy轻松入门--搭建Groovy开发环境 学习到如何搭建Groovy环境,之后我会讲一下如何搭建Grails环境,然后手把手地写个Demo程序告终,我还会...
Groovy轻松入门—搭建Groovy开发环境 Groovy轻松入门—搭建Groovy开发环境
Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该
groovy 经典入门 通俗易懂,groovy 经典入门 通俗易懂,groovy 经典入门 通俗易懂
Groovy轻松入门—Grails实战基础篇
与Java代码比较起来,Groovy语言的另一个主要优势是,Groovy代码编写量相对小些。在一般情况下,Java代码过于复杂,难于理解和维护。这是因为Java需要大量的模板文件或者转换代码,而Groovy却不需要。 本书是...
通过与Java的比较,迅速掌握Groovy。需要就下载吧
Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源
groovy快速入门指南(中文),想了解groovy的朋友可以下载看看
GROOVY入门经典GROOVY入门经典GROOVY入门经典GROOVY入门经典
Groovy轻松入门:简单的介绍了Groovy的使用方法
Groovy Script 入门 Groovy 脚本入门
, 与Java代码比较起来,Groovy语言的另一个主要优势是,Groovy代码编写量相对小些。在一般情况下,Java代码过于复杂,难于理解和维护。这是因为Java需要大量的模板文件或者转换代码,而Groovy却不需要。, 本书是有关...
Groovy入门教程[参照].pdf
groovy 开发入门 包括和java的比较,基本语法和进阶
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...
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
Groovy_快速入门,对于初学groovy的很有帮助,值得学习
groovy入门 groovy入门 groovy入门 groovy入门groovy入门groovy入门