加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy的基础语法

发布时间:2020-12-14 16:43:52 所属栏目:大数据 来源:网络整理
导读:Groovy 的语法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。 对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。 语句 Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分
 
 
Groovy 的语法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。
对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。

语句

Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;

如果一行上有多个语句,则需要用分号来分隔。

x = [1,2,3]
println x y = 5; x = y + 7
println x
assert x == 12

另外return关键字在方法的最后是可选的;同样,返回类型也是可选(缺省是Object)。

变量

1、没有类型的java

作为动态语言,groovy中所有的变量都是对象(类似于.net framework,所有对象继承自java.lang.Object),

在声明一个变量时,groovy不要求强制类型声明,仅仅要求变量名前使用关键字def。

def?var="hello world"

println?var

println?var.class

你可以看到程序最后输出了var的实际类型为:java.lang.String

作为例外,方法参数和循环变量的声明不需要def。

2、不需要的public

你可以把main方法前面的public去掉,实际上,groovy中默认的修饰符就是public,所以public修饰符你根本就不需要写,这点跟java不一样。

3一切皆对象

听起来象是“众生平等”的味道,事实上groovy对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。

如果你赋给它boolean?,那么不管它原来是什么类型,它接受boolean值之后就会自动把类型转变为boolean值。看下面的代码:

"hello "+

???????"world"+

",groovy!"

???????println?var;

println?var.class;

???????var=1001

class

输出结果:

hello world,groovy!

class java.lang.String

class java.lang.Integer

?

var这个变量在程序运行中,类型在改变。一开始给它赋值String,它的类型就是String,后面给它赋值Integer,它又转变为Integer。

循环

代码:

???????def?repeat(val){

????????????for(i =?0; i <?5; i++){

?????????????println?val

????????????}

???????}

???????repeat(var)

输出:

注意循环变量i前面没有def。当然也没有java中常见的int,但如果你非要加上int也不会有错,

因为从Groovy1.1beta2之后开始(不包括1.1beta2),groovy开始支持java经典的for循环写法。

此外,上面的for语句还可以写成:

for(i?in?0..5)

这样的结果是一样的。?

范围

这个跟pascal中的“子界”是一样的。在前面的for循环介绍中我们已经使用过的in?0..5)这样的用法,其中的0..5就是一个范围。

范围?是一系列的值。例如?“0..4”?表明包含?整数?0、1、2、3、4。Groovy?还支持排除范围,“0..<4”?表示?0、1、2、3。还可以创建字符范围:“a..e”?相当于?a、b、c、d、e。“a..<e”?包括小于?e?的所有值。

范围主要在for循环中使用。

?? ? ??

集合

Groovy支持最常见的两个java集合:java.util.Collection和java.util.Map。前面所说的范围实际也是集合的一种(java.util.List)。

(1) Collection

Groovy?中这样来定义一个Collection:

def?collect=["a","b",204)">"c"]

除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:

collect.add(1);

collect<<"come on";

collect[collect.size()]=100.0

Collection使用类似数组下标的方式进行检索:

println?size()-1]

collect[5]

groovy支持负索引:

collect[-1]??????//索引其倒数第1个元素

collect[-2]??????//索引其倒数第2个元素

Collection支持集合运算:

collect=collect+5????????//在集合中添加元素5

size()-1]

collect-'a'?????????在集合中减去元素a(1)

collect[0]??????????现在第个元素变成b

同样地,你可以往集合中添加另一个集合或删除一个集合:

collect-collect[0..4]???把集合中的前5个元素去掉

collect[0]???现在集合中仅有一个元素,即原来的最后一个元素

collect[-1]??也可以用负索引,证明最后一个元素就是第一个元素

(2) Map

Map是“键-值”对的集合,在groovy中,键不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.)。

如此可以定义一个Map:

def?map=['name':'john',204)">'age':14,204)">'sex':'boy']

添加项:

???????map=map+['weight':25]???????添加john的体重

???????map.put('length',1.27)??????的身高

???????map.father='Keller'?????????的父亲

可以用两种方式检索值:

println?map['father']???????//通过key作为下标索引

println?map.length??????????//通过key作为成员名索引

字符串

Groovy中的字符串允许使用双引号和单引号。

当使用双引号时,可以在字符串内嵌入一些运算式,Groovy允许您使用 与 bash 类似的 ${expression} 语法进行替换。可以在字符串中包含任意的Groovy表达式。

 name="James"
 println "My name is ${name},'00${6+1}'" //prints My name is James,'007'

Groovy还支持"uXXXX" 引用(其中X是16进制数),用来表示特殊字符,例如 "u0040" 与"@"字符相同。

对字符串的操作

  1. contains 字符串中是否包含子字符串,'groovy'.contains('oo')将返回true;
  2. count 返回字符串中子字符串出现的次数,'groooovy'.count('oo')将返回3.
  3. tokenize 根据分隔符将字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。
  4. 减操作 'groovy'-'oo',结果是'grvy'。
  5. 乘操作 'oo'*3,结果是'oooooo'。
Linke dHashMap

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读