[轉載]Groovy 和 JAVA 比較

來源:互聯網
上載者:User
本教程是針對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 :
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..<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:
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.Regex常量在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: 
public   void  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寫法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.