[轉載]Groovy 和 JAVA 比較
阿新 • • 發佈:2019-02-15
本教程是針對Groovy最新版本編寫的
Groovy和Java的相同點有:
0+, 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 19+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+
+表示Groovy不但涵蓋了Java的語法,而且還有增強部分
Groovy和Java的不 同 點有:
1, 2, 5, 7, 9, 11, 16, 17, 24, 25, 26, 27,33
下面所列序號不分先後順序:
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 :
publicclass Test {
publicstaticvoid main(String[] args) {
String name1 ="山風小子";
String name2 =new String("山風小子 ");
// Groovy中寫為 name1 == name2if (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中定義變數的varString name2 =new String("山風小子") //請注意Groovy的句尾的分號時可選的,即可要可不要,前提是一行程式碼一條語句
// Java中寫為 name1.equals(name2)if (name1 == name2) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
// Java中寫為 name1 == name2if (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..<len) {...}
Java:
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..<len) {
// do something}
4. Java中的方法返回寫為return; 或者return obj; 在Groovy的方法中return是可選的
Java:
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的/** */
Java:
/*
* 多行註釋
*//**
* javadoc 註釋
*/// 單行註釋
Groovy:
#! 首行註釋,使Unix shell能夠定位Groovy啟動程式以執行Groovy程式碼,例如
#!/usr/bin/groovy
/*
* 多行註釋
*//**
* javadoc 註釋
*/// 單行註釋
7. Java5中的for-each:for (Type t : iteratable) {...} 在Groovy中,for (t in iteratable) {...}
Java:
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來定義方法,請看註釋。
Java:
publicclass Hello {
private String name ="山風小子";
publicvoid sayHello() {
System.out.println("Hello, "+ name);
}
} Groovy:
class Hello {
private String name ="山風小子"publicvoid 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:
// Java: publicvoid varargsMethod(Type args) {
//do something}
Groovy:
// 與Java中的寫法相同
def varargsMethod(Type... args) {
//do something
}
// Groovy還可以用[]代替...,反應出varargs的本質
def varargsMethod(Type[] args) {
//do something}
20.引用當前物件,Groovy和Java相同,在Java中用this表示,在Groovy中也用this表示,而且在Groovy中,this可以出現在static範圍中,指向所在類的類物件,本例中,this等同於ThisInStaticScope.class(Java寫法)或ThisInStaticScope(Groovy寫法)
Groovy和Java的相同點有:
0+, 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 19+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+
+表示Groovy不但涵蓋了Java的語法,而且還有增強部分
Groovy和Java的不 同 點有:
1, 2, 5, 7, 9, 11, 16, 17, 24, 25, 26, 27,33
下面所列序號不分先後順序:
0. 在Groovy可以用def定義無型別的變數(定義變數方面def與JavaScript中的var相似),和返回值為無型別的方法,而在Java中沒有def
class Man {
def name ="山風小子"
def introduce() {
return"I'm $name"// return可以省略 }
}
1. Java中的equals方法對應Groovy中的== , 而Java中的==(判斷是否引用同一物件)對應Groovy中的is方法
eg.
Test1.java :
publicclass Test {
publicstaticvoid main(String[] args) {
String name1 ="山風小子";
String name2 =new String("山風小子
// Groovy中寫為 name1 == name2if (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中定義變數的varString name2 =new String("山風小子") //請注意Groovy的句尾的分號時可選的,即可要可不要,前提是一行程式碼一條語句
// Java中寫為 name1.equals(name2)if (name1 == name2) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
// Java中寫為 name1 == name2if (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..<len) {...}
Java:
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..<len) {
// do something}
4. Java中的方法返回寫為return; 或者return obj; 在Groovy的方法中return是可選的
Java:
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的/** */
Java:
/*
* 多行註釋
*//**
* javadoc 註釋
*/// 單行註釋
Groovy:
#! 首行註釋,使Unix shell能夠定位Groovy啟動程式以執行Groovy程式碼,例如
#!/usr/bin/groovy
/*
* 多行註釋
*//**
* javadoc 註釋
*/// 單行註釋
7. Java5中的for-each:for (Type t : iteratable) {...} 在Groovy中,for (t in iteratable) {...}
Java:
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來定義方法,請看註釋。
Java:
publicclass Hello {
private String name ="山風小子";
publicvoid sayHello() {
System.out.println("Hello, "+ name);
}
} Groovy:
class Hello {
private String name ="山風小子"publicvoid 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:
// Java: publicvoid varargsMethod(Type args) {
//do something}
Groovy:
// 與Java中的寫法相同
def varargsMethod(Type... args) {
//do something
}
// Groovy還可以用[]代替...,反應出varargs的本質
def varargsMethod(Type[] args) {
//do something}
20.引用當前物件,Groovy和Java相同,在Java中用this表示,在Groovy中也用this表示,而且在Groovy中,this可以出現在static範圍中,指向所在類的類物件,本例中,this等同於ThisInStaticScope.class(Java寫法)或ThisInStaticScope(Groovy寫法)