文档章节

Groovy与Java的区别

不战则亡
 不战则亡
发布于 2015/02/16 21:07
字数 1333
阅读 305
收藏 4
点赞 0
评论 0

##默认以BigDecimal类型来进行数学计算 浮点数默认的是BigDecimal类型,因此3.14不会被Groovy创建成doublefloat,而被创建成BigDecimal。这导致人们相信Groovy的计算效率非常低下。 如果你确实想用floatdouble类型,一定要为变量加上floatdouble关键字,如下:

<pre class="brush:groovy"> double piDouble = 3.14 float piFloat = 3.14?? </pre>

或者,你也可以使用后缀的形式来指定,例如:

<pre class="brush:groovy"> def piDouble = 3.14d def piFloat = 3.14f?? </pre>

你也可查看Groovy数学计算章节。 ##默认引入的包 下面的所有包和类在默认情况下已经被引入,也就是说,你不再需要引入下面这些包了:

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

##常见错误 如果你是java程序员,下面这个列表可能就是你经常会弄错的地方:

  • 在所有类型下==都等于equals()。在Java当中,原始类型进行比较,==即为equals(),对象进行比较,==的意思是值相等。自从我们使用了自动包装之后,这个问题对Java开发者来说就有些混淆了。为了简单起见,在Groovy中,==就是equals()。假如你确实需要判定值相等,你可以使用像(foo.is(bar))这样的is()方法。is()方法不支持null,但是在这里你依然可以使用==,例如:foo==null
  • 在Groovy当中,in是关键字,因此,你不能把他当作变量名来使用。
  • 定义数组的时候,你不能写成这样

<pre class="brush:groovy"> int[] a = {1,2,3}; </pre>

而必须写成这样

<pre class="brush:groovy"> int[] a = [1,2,3]; </pre>

  • 假如你想写一个像下面一样的for循环

<pre class="brush:groovy"> for (int i=0; i &lt; len; i++) {...} </pre>

在groovy当中,你当然可以使用上面这种方式,但是你也可以只使用一个计数变量替代他,如:

<pre class="brush:groovy"> for (i in 0..len-1) {...} </pre>

或者

<pre class="brush:groovy"> for (i in 0..&lt; len) {...} </pre>

或者

<pre class="brush:groovy"> len.times {...} </pre>

##需要注意的事情

  • 分号是可选的,用不用就看心情了(当然,多个表达式在同一行的情况下,你必须是他来分隔)。
  • return关键字是可选的。
  • 在静态方法内部,你可以使用this关键字,用于引用该类。
  • 类和方法在默认情况下都是public
  • protected修饰符在Groovy中和在Java中是一样的。也就是说,在同一个包和派生类当中,他们是友好可见的。
  • 方法签名中的throws子句在Groovy编译器中是不被检查的。因为检查与否的异常没有区别。
  • 你讲无法获取编译错误,就像java中的undefined成员或传递了错误的类型。猛戳运行时VS编译时,静态VS动态

##常见陷阱 Java程序员用分号来来终止语句而并不使用闭包。它们在类定义的时候初始化实例,所以你可能有时候会看到如下的代码:

<pre class="brush:groovy"> class Trial { private final Thing thing = new Thing ( ) ; { thing.doSomething ( ) ; } } </pre>

许多Groovy程序员避开使用分号(有的却一直在使用分号 - 这是编码风格的问题。)。这导致了上述代码的书写困难,如下:

<pre class="brush:groovy"> class Trial { private final thing = new Thing ( ) { thing.doSomething ( ) } } </pre>

这将抛出MissingMethodException异常! 这里的问题是,在这种情况下,换行符不是一个语句结束,因此下面的代码快被当成闭包来处理,作为参数传递给Thing的构造函数。对许多人来说这很诡异,但这是事实。假如你想通过这种方式来初始化实例,实际上是强制需要分号的:

<pre class="brush:groovy"> class Trial { private final thing = new Thing ( ) ; { thing.doSomething ( ) } } </pre>

这种方式初始化后的块定义显然是初始化一个实例。 另外一个文档列出了一些你必须知道的误区和一些最佳实践以避免这些陷阱。 ##Java中不可用的一些Groovy新特性

  • 闭包
  • lists和maps的源生语法
  • GroovyMarkup和GPath的支持
  • 源生支持正则表达式
  • 多态迭代和强大的switch表达式
  • 动态和静态类型君已经被支持 - 因此你可以在方法、属性、变量当中省去类型声明
  • 字符串当中可以内嵌表达式
  • 越来越多的帮助方法(或许应该翻译成工具方法)被添加到JDK
  • 更加简单的语法编写bean属性和事件监听
  • Safe navigation使用?.操作符。例如variable?.fieldvariable?.method() - 没有更多的if嵌套来堆积你的代码。

© 著作权归作者所有

共有 人打赏支持
不战则亡

不战则亡

粉丝 1
博文 10
码字总数 5090
作品 0
杭州
程序员
Groovy轻松入门-通过与Java的比较,迅速掌握Groovy

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的不...

Sub
2013/03/08
0
1
Groovy轻松入门——通过与Java的比较,迅速掌握Groovy

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的不...

DavidBao
2015/05/15
0
0
Groovy 2018 Roadmap:下一步主打 lambda 和模块化

JVM 动态脚本语言 Groovy 在 5 月底发布了最新的 2.5 版本, 最大的亮点是对宏的支持,允许开发者在创建 compile-time 元编程扩展时直接使用 Groovy 语法,而不是使用内部编译器表示。 Apac...

王练
06/07
0
0
第一章:groovy 的语法和用法习惯

我们将介绍 groovy 语言的基础知识, 使用 groovy 需要知道的两件事:代码外观和断言。 我是看着Groovy in Action的时候,写这个博客的。所以很多东西是从里面复制出来的,希望大家去看原书。...

supperman
2012/11/16
0
0
Spring对Groovy Bean的支持

Groovy是一个基于JVM的动态语言,对于一个Java开发者,它最让我喜欢的地方就是兼容Java的语法,学习使用成本低。从2.0版本开始,Spring就对Groovy这些动态语言提供了支持,结合Spring和Groov...

joshuazhan
2013/06/16
0
2
Groovy神奇的NullObject

在这篇文章里,我将向你展示Java和Groovy中不怎么明显的的区别。 让我们从下面这行代码开始: Object o = null 这条语句在Java和Groovy下都可以运行(只是在Java下需要在行尾加一个)。 然而...

翟志军
2014/04/18
0
2
centos groovy环境建立

#wget -S http://dist.groovy.codehaus.org/distributions/groovy-binary-1.6.1.zip Unzip it: #unzip groovy-binary-1.6.1.zip set the environment: vi /etc/profile export GROOVYHOME=/e......

hjswust
2013/08/13
0
1
Java 下一代: Groovy、Scala 和 Clojure

在与 Martin Fowler 共同参加的一次主题演讲中,他提供了一个敏锐的观察报告: Java 的遗产是 平台,不是 语言。 最初的 Java 技术工程师曾做过一个了不起的决定,将语言从运行时中分离出来,...

一只死笨死笨的猪
2014/10/23
0
0
java程序员为什么使用Groovy

一直听说java世界里有个Groovy,但是一直没时间去了解它究竟是一个怎么样子的。我们现在的项目里放了很多开源包,而且项目中做流程的时候,规则就是用Groovy实现的。近来闲来无事,于是开始认...

supperman
2012/11/16
0
24
gradle/Groovy语法

Groovy官网的介绍(http://www.groovy-lang.org/download.html#gvm) Gradle API 文档: https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html 深入理解Android(一)......

shareus
04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
2
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
158
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部