




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 Groovy与Java的相同处1) 在Groovy可以用def定义无类型的变量(定义变量方面def与JavaScript中的var相似),和返回值为无类型的方法,而在Java中没有defGroovy:Class Man= def name=”zhangsan” def introduce() return “I am ” /return可以省略 2) Java中的for循环for(int i=0;ilen;i+)在Groovy中还可以写成for(I in 0.len-1)或者for(I in 0.len)3) Java中的方法返回写为return;或者return obj;在Groovy的方法中return是可选的。JAVA: Groovy:Public String sayHello() public String sayHello() return “Hello,张三 return “Hello,zhangsan”; /或者写成“Hello,zhangsan” 4) Groovy中的注释比Java多了首行注释#!,其他与Java相同5) Groovy中的switch语句与Java中相同,不过支持更多类型了,比如String6) Java中的String常量表示为“Hello,zhangsan”,在Groovy中单引号双引号都可以表示。7) 对象创建在Java中写成Thought t=new Thought();在Groovy中也可以这样写,不过多了种写法:def t=new Thought();8) 静态方法调用在Java和Groovy中相同,即ClassName.staticMethodName();9) 实现接口和继承父类方面Groovy也与Java完全相同,即实现接口class ClassName implements InterfaceName 继承父类:class ClassName extends SuperClass 10) 定义接口方面Groovy与Java完全相同,即interface InterfaceName /在Groovy中默认为public的11) 类变量即static变量,Groovy与Java相同,static String name=”张三”,在Groovy中也可以写成 static name=”张三”12) 在varargs方法方面,Groovy比Java多一种表达方式,如下所示:Java:public void varargsMethod(Typeargs) /do somethingGroovy:/与Java中的写法相同 /Groovy还可以用代替反应varargs的本质def varargsMethod(Typeargs) def varargsMethod(Type args) /do something /do something 13) 引用当前对象,Groovy和Java相同,在Java中用this表示,在Groovy中也可以用this表示,而且在Groovy中,this可以出现在static范围中,指向所在类的类对象,本例中,this等同于ThisInStaticScope.class(Java写法)或ThisStaticScope(Groovy写法)14) 子类中调用父类方法,Groovy和Java也相同,在Java中super.methodName(),在Groovy中super.methodName()15) 命名空间的定义,Groovy和Java相同,在Java中package edu.ecust.bluesun;在Groovy中package edu.ecust.bluesun(分号可省略)16) 在导入类方面,Groovy和Java相同,在Java中 import edu.ecust.bluesun.GroovyTest;在Groovy中 import edu.ecust.bluesun.GroovyTest17) 在异常处理方面,Groovy与Java相同,除了不强制程序员捕获检查异常(checked exception)外,并且在方法声明时,也可以不写throws语句。18) 在Groovy中,如果不是Boolean或boolean类型,非null或非空(空字符串,,:)为true,null为false,而Java中对象不可以表示为true或者false;如果是Boolean或boolean类型,与Java中的一样。19)二、 Groovy与Java的不同处Groovy试图使Java开发者使用起来尽可能自然,在设计Groovy的时候遵循这样的原则,那就是尽可能减少Groovy的突兀之处。尤其是对那些有着Java开发基础的人,他们学习Groovy,当然希望Groovy与Java不要差别过大。下面我们说说Java和Groovy之间的主要的不同之处。1) 缺省引入的包所有以下的这些包和类都是缺省引入的,也就是说不需要再特意使用import语句来引入它们。所有以下的这些包:java.io.*, java.lang.*, java.math.BigDecimal, java.math.BigInteger, .*, java.util.*, groovy.lang.*, groovy.util.*2) 支持函数式编程,不需要main函数3) 断言不支持jvm的-ea参数进行开关4) 支持对对象进行布尔求值5) 类不支持default作用域,且默认作用域为public6) 受检查类型异常(Checked Exception)也可以不用捕获7) 一些新的运算符8) groovy中基本类型也是对象,可以直接调用对象的方法,如:assert (-12345).abs() = 123459) 字符串的处理 String对象和java类似,但没有character的概念,没有迭代每个字符的方法。使用单引号定义普通字符串,双引号定义的字符串可以包含Groovy运算符,$符号则需要转义($),如:String name = Ben,String greeting = Good morning, $name10) as运算符,用于没有集成关系的类型间强制类型转换,如:assert543667 as String = 54366711)一些集合类型的语法甜头(Syntax sugar for lists, maps, and ranges)从语言层面支持ListMapRange类型,而不是通过SDK中的类使用创建创建和初始化List、Map,如:List myList = apple, orange, lemon Map myMap = 3: three, 6: six, 2: two 12)Java中的equals方法对应Groovy中的=,而Java中的=(判断是否引用同一对象)对应Groovy的is方法。eg.Test1.java :Public class TestPublic static void main(String args)String name1=”山风小子”;String name2= new String(”山风小子”);/Groovy中写为name1=name2if(name1.equals(name2)System.out.println(”equal”);elseSystem.out.println(”notequal”);/Groovy中写为name1.is(name2)if(name1=name2)System.out.println(”identical”);elseSystem.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”);elseSystem.out.println(”not equal”);/Java中写为name1=name2if(name1.is(name2)System.out.println(”identical”);elseSystem.out.println(”notidentical”);13)Java中的数组定义为int a=1,2,3 Groovy中写成int a=1,2,314)Java中的inner class即内部类,在Groovy中用Closure实现(Closure是Java7正在考虑的一个特性,比inner class在语义方面更完善)15)在Java5.0中的for-each:for(Type t:iteratable),在Groovy中,for(t in iteratable).16)Groovy的while语句跟Java相同,但废弃了do-while(考虑到语义方面的问题,而且do-while可以用其他形式的循环语句替代,使用频率低)17)正则表达式常量在Java中没有,在Groovy中表示为 /pattern/18) Hash常量(类型为java.util.HashMap)在Java没有,在Groovy中表示为 def frequence = the: 5, hello: 2, world: 219) List常量(类型为java.util.ArrayList)在Java中没有, 在Groovy中表示为 def list = 3, 11, Hello, 山风小子, !20)方法的默认参数,Java中没有,Groovy中表示如下:Class Hello /如果没有参数传入,默认打印出Hello,张三 def greet(name=”张三”) println(“Hello,$name”) /也可以省略括号() 21)在Groovy中,语句如果单独占一行的话,句尾的分号(;)可以省略,而在Java中每条语句后面必须跟有分号(;)22)在Groovy中,万事万物都是对象!而Java中不是这样,基本类型(primitive type)就不是对象。23) 在Java中,Class对象表示为ClassName.class,而在Groovy中,可以直接用ClassName表示Class对象24) Groovy不仅有? :三元操作符,还有?:两元操作符,但Java只有? :三元操作符。 Groovy: def a=null; /如果a为“空”(null,空串“”,,:),那么结果为?:之后的那个值;如果不为“空”,那么结果是a def result=?:”default result” println result a=”张三” result=a?:”default result” println result25) Groovy能进行多重赋值,但Java不能 Groovy: def a,b (a,b)=1,2 /给a和b赋值 println(a,b) (a,b)=b,a /交换a和b的值 println(a,b) def(c,d)=1,2 /声明的同时进行初始化 println(c,d) 三、Groovy常见陷阱用惯了Java的开发人员,开始使用Groovy,经常会在以下事情上栽跟头:= 表示相等。而在Java的语法中,=表示类型相等,是同一个对象。这让Java开发人员感到很困惑(因为即使X等于5,再用x=5做判断却是不等的)。所以,为了简单方便,在Groovy中,= 就表示相等,相当于Java里的equals()。如果确实需要判断是否是同一对象,那么可以使用“is”方法,如foo.is(bar)。但“is”不能用于空(null)对象的判断,可以使用=来判断空值,如foo=null。in 在Groovy里是一个关键字,切记不要使用它做变量名。定义数组的时候,不可以写:int a = 1,2,3;需要写成:int a = 1,2,3for循环可以像原来那样写:for (int i=0; i len; i+) .但是只能使用一个计数变量,在Groovy中也可以这样写:for (i in 0.len-1) .或者:for (i in 0.或者:len.times .需要知道的事情分号可用可不用。当然如果一行中有多条语句,中间必须用分号隔开。return关键字可有可无。可以在静态方法中使用this关键字(表示当前类的引用)。方法和类在缺省情况下是public。在Groovy中,protected指包保护和Java保护。比如,可以在同一个包里定义友元,派生类也可以访问保护成员。现在Groovy还不支持内部类(Inner classes),多数情况下,可以用closures代替。Groovy编译器不检查方法名旁的throws子句。如果程序员使用了未定义的成员或传递了类型不符的参数时,编译器不会像Java那样给出编译错误,关于这点,请参考Runtime vs Compile time, Static vs Dynamic。三、 Groovy不常见陷阱 Java程序员习惯于用分号来结束语句,而且Java中没有闭包的概念。下面是一个例子,在一个类的定义中初始化另一个类的实例:class Trial private final Thing thing = new Thing ( ) ; thing.doSomething ( ) ; 很多Groov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业家精神代际传递-洞察及研究
- 第八单元《词义的辨析和词语的使用》教案(表格式)统编版高中语文必修上册
- 2025企业租赁合同协议书模板
- 党史教育线上考试题库及答案
- 2025【合同范本】铁路运输合同范本
- 2025养殖场山地租赁合同
- 冲压安全生产培训资料课件
- 2025租赁合同模板示例
- 八月快递安全培训总结课件
- 2025化工卧式泵买卖合同书
- 2025-2026学年统编版(2024)初中道德与法治八年级上册(全册)教学设计(附目录 P133)
- 劳务外包协议书
- 2025年初级社工考试《综合能力》真题及答案
- 2025至2030中国草莓果酱行业发展研究与产业战略规划分析评估报告
- 2025纪念中国人民抗日战争胜利80周年心得体会五
- 2025义务教育劳动教育标准课程考试题库(含答案)
- 驾照科目四模拟考试题及答案大全
- 电商用户社区与运营创新创业项目商业计划书
- 土地增值税清算培训课件
- 2025年营养指导员师岗位技能及理论知识考试题库(含答案)
- 2025年青海省格尔木市辅警招聘考试试题题库及答案详解(易错题)
评论
0/150
提交评论