「groovy和java」groovy和java的区别
今天给各位分享groovy和java的知识,其中也会对groovy和java的区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、groovy语言主要是用来干什么,和JAVA的区别是什么
- 2、Groovy这门语言有哪些具体项目使用场景? - 徐明明的回答 - 知乎
- 3、java程序员为什么使用Groovy
- 4、Java和Groovy的区别
- 5、Groovy基本语法
- 6、java和groovy能混编吗
groovy语言主要是用来干什么,和JAVA的区别是什么
Groovy是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用。 groovy的语法跟java完全按类似。
它和java的区别是:
一:java为强类型的语言;Groovy为弱类型,可以自动推断类型;
创建数组的时候Groovy的语法为:def intArray=[2,3,4]
创建MAP的时候Groovy的语法为:def m={}
二:Groovy默认访问修饰符为Public,可以不写访问修饰符
可以直接用def关键字定义,如:
def sayHello(){}
限定访问范围
@PackageScope修饰方法
Groovy这门语言有哪些具体项目使用场景? - 徐明明的回答 - 知乎
Groovy这门语言有哪些具体项目使用场景? - 徐明明的回答 - 知乎
我们正在做的一个项目用到了,这是一个机器学习的平台,平台里面可以接入各种机器学习的算法,目前已经支持30来种算法。每个算法有各种各样的参数,为了提高用户友好性,让用户使用起来更方便,用户在页面上“填入”,“选择”的参数值跟我们实际提交到集群执行的参数往往不一样,比如:用户选择一个算法的输入表table1,而实际上我们提交给后台集群的时候需要加上当前project的名字(假如是project1):project1.table1。
又比如有些算法参数是不需要用户输入的,比如一个算法的输出表,具体的表名用户其实不关心,他只想我们把最后的结果告诉他,这时候我们需要给他自动生成输出表名的参数。
这样就需要一个【“参数转换”】的过程,这些参数转换逻辑虽然不复杂,但是它们有一个重要的特征: 不可枚举 。因此我们采用了【Groovy脚本来描述这个转换算法】。而且我们机器学习平台将来的目标是【允许用户上传自己编写的算法,这个转换逻辑的可配置化就显得更必要了。】
都是因为我们有一个叫洛笛的牛逼同事
//
groovy的生态中有gradle(安卓在使用), grails. gant, spock, Geb. Griffion。从生态上已经很全面了。最近又可以用groovy来开发Android了。如杨飞所答,有java的地方就可以有groovy。只是同时java也在进化,类库等以java为主。不会发生直接替代。但是groovy的应用也会越来越广泛。
//
我们用来做规则引擎、流程引擎,可以做动态脚本环境,尤其是那些不需要发布又经常变更的场合
java程序员为什么使用Groovy
Groovy是一门基于JVM的脚本语言。它在兼容Java语法的同时,借鉴了Ruby、Python等语言的特性,有自己一套简洁而灵活的语法。同时,运行在JVM上也意味着它也可以使用Java语言编写的库。这两点结合,让Groovy极其适合编写Java代码的测试脚本。
选择Groovy作为测试脚本的语言的原因:
Groovy基于JVM,这使我能够调用产品的Java代码,也能够调用Java标准库里的代码。除些之外,还可以通过Maven或Gradle使用大量的第三方Java库。
Groovy是动态语言,扩展了Java的容器类,提供了完善的函数式编程和元编程支持。这让我们可以写出简洁而富有表现力的代码。
Groovy提供了大量的语法糖。与Java自身繁冗的代码相比,这些语法糖大大节约了我们编写脚本的时间,减少了我的脚本的代码量。
然而,Groovy在带来上述三个优点的同时,也会带来有相应的缺点:
效率问题。Groovy作为运行在JVM上的动态语言,运行效率是低于Java的。虽然可以用@CompileStatic注解来静态编译一些类以提高效率,但这样又会失去Groovy的一些动态语言的特性。
语法过于灵活,运用不当会降低可读性与可维护性。Groovy支持元编程特性,可以在运行时动态添加方法。这一点自然可以简化代码,但也有很大的可能会降低可维护性。函数式编程与大量的语法糖会让不熟悉Groovy的人读起来一头雾水,反而降低了可读性。
Java和Groovy的区别
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。)
Groovy基本语法
官方文档
和Java一样,支持单行(使用 // )、多行( /* */ )和文档注释(使用 /** */ )。
UNIX系统支持一种特殊的单行注释叫作 Shebang line ,用于指明脚本的运行环境,这样就可以直接在终端中使用 ./xxx.groovy 运行(当然,前提是文件得有可运行的权限),而不用像 groovy xxx.groovy 这样运行:
# 号必须是文件的第一个字符。
以字母、美元符号 $ 或下划线 _ 开始,不能以数字开始。以下是可用的标识符:
以下是不可用的标识符:
注意:在点号后,是可以使用关键字作为标识符的:
Groovy在点表达式(dotted expression)后面可以使用引号标识符,比如 persion.name 可以表示为 persion.'name' 或 persion."name" 。而引号中可以包含普通标识符中不支持的字符,比如空格、中档线 - 这些:
其实,Groovy支持多种字符串的字面量表达形式,这些都是可以出现在点号后面的:
更方便的是,Groovy中的 GString 支持 插值 ,也可以用在点号后面的:
在Groovy中字符串有两种类型,一种是Java原生的 java.lang.String ;另一种是 groovy.lang.GString ,又叫 插值字符串 (interpolated strings)。
在Groovy中,使用单引号括住的字符串就是 java.lang.String ,不支持插值:
使用三单引号括住字符串支持多行,也是 java.lang.String 实例,在第一个 ’‘’ 起始处加一个反斜杠 \ 可以在新一行开始文本:
如果双引号括住的字符串中没有插值表达式(interpolated expression),那它就是 java.lang.String ;如是有插值表达式,那它就是 groovy.lang.GString :
在Groovy所有的字符串字面量表示中,除了单引号字符串和三单引号字符串,其他形式都支持字符串插值。字符串插值,也即将占位表达式中的结果最终替换到字符串相应的位置中:
当使用点号表达式时,可以只用 $ 代替 ${} :
插值占位符中还支持闭包,而闭包的一个好处是 惰性求值 (lazy evaluation):
当一个方法的需要一个 java.lang.String 变量,而我们传递的是一个 groovy.lang.GString 实例时, GString 的 toString 方法会被自动调用,看起来像我们可以直接将一个 GString 赋值给一个 String 变量一样。
注意: GString 与 String 的hashCode是不一样的,即使他们最终结果一样。所以,在Map中,不应该用 GString 去做元素的Key,而又使用普通的 String 去取值:
类似于三单引号字符串,但支持字符串插值。
除了使用引号来括住字符串,还可以使用 / 。它一般用来定义正则表达式:
这种字符串使用 $/ 开始,使用 /$ 结束,其中的转义字符为 $ :
在Groovy中并没有明确的字符字面量表示形式,我们必须明确指明:
当使用 def 指明整数字面量时,变量的类型会根据数字的大小自动调整:
为了精确地计算小数,在Groovy中使用 def 声明的小数是 BigDecimal 类型的:
如果要强制指明一个数字的字面量类型,可以给字面量加上类型后缀:
默认情况下Groovy的列表使用的是 java.util.ArrayList ,用中括号 [] 括住,使用逗号分隔:
如果要使用其它类型的列表(如: LinkedList )可以使用 as 操作符或显式分配给一个指定类型的变量:
Groovy重载了列表的 [] 和 操作符,可以通过 List[index] 访问指定位置元素,也可以通过 List element 往列表末尾添加元素:
在Groovy中,没有数组的字面量定义方式。和特定类型列表的定义方式一样,我们需要使用 as 操作符或显式地分配给一个数组类型的变量:
Groovy使用中括号 [] 来定义映射,元素需要包含key和value使用冒号分隔,元素与元素之间用逗号分隔:
在上边的例子中,虽然没有明确的使用字符串 ’red‘ 、 ’green‘ ,但Groovy会自动把那些key转化为字符串。并且,在默认情况下,初始化映射时,key也不会去使用已经存在的变量:
如果要使用一个变量作为key,需要用括号括住:
java和groovy能混编吗
答案是肯定的,java groovy混编:一种最“势利”的折衷
而groovy,说它是java++也不为过,因为java代码直接就可以被groovy编译, groovy完全兼容java语法, 对一般java开发人员来说,这真是太亲切了
关于groovy和java和groovy和java的区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。