Groovy基础语法

一、语法

        注释

        单行注释:以//开头,可以出现在一行的任意位置,从//开始直到行结尾都属于注释部分。

// 单行注释
println "hello" // 单行注释
        多行注释:以/*开头,可以出现在一行的任意位置,从/*开始直到遇到的第一个*/都属于注释部分,即使是换行。
/* 这是
   多行注释 */
println "hello" /* 另一个
                   多行注释 */
println 1 /* 可以在代码中间*/ + 2 /* 也可以在其他地方 */
        文档注释:与多行注释类似,支持多行,不同的是文档注释以/**开头,以*/结尾。第一个文档注释行之后的行可以选择以*开头。文档注释通常用来解释类、接口、枚举类、注解、属性、参数和方法。
/**
 * 类描述
 */
class A {
    /** 属性描述 */
    String a

    /**
     * 方法描述
     */
    String foo() {
       "Hello"
    }
}
        shebang标记:shebang标记#!是一种特殊的注释,它的作用是能够使脚本在Unix系统上直接从命令行运行,只要已经安装Groovy,并且配置了path环境变量。其中#必须是第一个字符,任何缩进都会产生编译错误。
#!/usr/bin/env groovy
println "Hello from the shebang line"

        关键字

        groovy的关键字有as、assert、break、case、catch、class、const、continute、def、default、do、else、enum、extends、false、finally、for、goto、if、implements、import、in、instanceof、interface、new、null、package、return、super、switch、this、throw、throws、trait、true、try、while。

        标识符

        普通标识符,以字母,$和下划线开头,不能以数字开头,不能包含+、#等特殊符号,不能是关键字,但是在“.”后面可以使用关键字做标识符。
        引号标识符,在“.”后面可以使用引号标识符,如a.a可以表示为a.'a'或a."a",引号标识符的作用是,可以在引号中包含普通标识符不支持的字符,比如空格、减号等。Groovy中的GString也可以用在“.”后面,GString与普通字符串不同的是支持插值。后面会讲到。

        字符串

        在Groovy中有两种字符串,一种是java原生的字符串java.lang.String,另一种是插值字符串Groovy.lang.GString。
        单引号字符串:由单引号包围的一系列字符,单引号字符串是普通的字符串,不支持插值。
        双引号字符串:由双引号包围的一系列字符,如果不包含插值表达式则为普通字符串,如果有则为插值字符串。
        三单引号字符串:由三个单引号包围的一系列字符,是普通的字符串,不支持插值。三单引号字符串是多行的,可以使字符串内容跨越行边界,而不需要将字符串分割成片段,不需要连接符或换行转义字符。如果代码是缩进的,那么字符串中会包含缩进的空格。通过String的stripIndent()方法可以将其中的空格剥离出来,stripMargin()方法需要一个分隔字符来从字符串开始识别要删除的文本。
        三双引号字符串:由三个双引号包围的一系列字符,既有三单引号字符串多行的特性,又有双引号字符串可插值的特性。
        斜杠字符串:以“/”做为分隔符的字符串,因为不需要转义反斜杠,对于定义正则表达式和模式非常有用。在斜杠字符串中,只有正斜杠“/”需要转义。斜杠字符串也是多行的。需要注意的是空的斜杠字符串不能用“//”表示,因为“//”会被编译期认为是单行注释的开头。
        美元斜杠字符串:以“$/”开始,以“/$”结尾的多行字符串,支持插值。转义符号为“$”,可以转义另一个“$”或者“/”。但是“$”和“/”不需要转义,除非做为GString占位符开头,或者想要在字符串中转义美元斜杠字符串的限定符“$/”和“/$”。
        字符:Groovy中没有显示的字符文字,可以通过三种方式将字符串变成字符类型。

char c1 = 'A'//1)通过char类型明确指定变量
def c2 = 'A' as char//2)使用as运算符强制转换类型
def c3 = (char)'A' //3)通过括号转换类型。

        可以使用“\”来对一些特殊字符进行转义,比如,需要在单引号字符串中包含单引号,就可以通过“\'”进行转义,从而避免字符串异常终止。常见的转义字符有:\t(制表符),\b(退格符),\n(换行符),\r(回车符),\f(换页符),\\(反斜杠),\'(单引号,仅在单引号字符串和三单引号字符串中使用),\"(双引号,仅在双引号字符串和三双引号字符串中使用)。此外对于一些键盘之外的字符可以通过转义Unicode字符的方式进行引用。转义Unicode字符的格式为:\u后跟四位数字。

        数字

        在Java普通Number类型的支持下,Groovy支持多种整数和小数类型。
        整数
        与java相同的类型有byte、char、short、int、long、BigInteger。可以使用这些类型对数字类型进行明确的声明。还可以通过def进行声明,不同的是它会自动选择能够容纳所声明数字的类型。在Groovy中还可以用二进制、八进制、十六进制形式表示。二进制以0b为前缀。八进制以0为前缀。十六进制以0x为前缀。
        小数
        与java相同有float、double、BigDecimal。可以通过e或E后面跟一个可选的符号,和一个表示指数的整数来表示指数。如1e3表示1000.0,5E-2表示0.05。对于精确的小数计算Groovy选择BigDecimal做为小数类型。虽然BigDecimal是默认的小数类型,但是方法接受的参数和闭包还是使用float和double做为参数类型。小数不能使用二进制、八进制和十六进制表示。
        在使用很长的数字的时候,很难用肉眼来分辨这些数字,通过在数字中放置下划线,就可以将数字进行分组,从而可以很容易的分辨这些数字。例如:
long creditCardNumber = 1_234_567_890L
double monetaryAmount = 12_345_132.12
long hexWords = 0xFFEC_DE5E
long maxLong = 0x7fff_ffff_ffff_ffffL
long bytes = 0b11010010_01101001_10010100_10010010
        除了通过明确的类型来定义数字,还可以通过后缀来强制将数字转换为指定的类型。如:Integer(I/i)、Long(L/l)、Float(F/f)、Double(D/d)、BigInteger/BigDecimal(G/g)。

        布尔类型

        布尔类型是一种特殊的类型,通过true和false来表示真或假。布尔类型只有true和false两种原始类型值。通过逻辑运算符可以表示一些更复杂的布尔表达式,Groovy中还有特殊的规则,可以将非布尔对象强制转换为布尔值。

        列表

        Groovy中通过使用方括号将逗号分隔的值包围起来表示列表。Groovy列表没有定义自己的集合类,只是使用普通的java列表类java.util.List。在定义列表时如果不指定,默认使用的是java.util.ArrayList。如果想要使用其他类型的列表,可以通过定义变量时显示的声明类型或者使用as操作符强制转换。列表中可以存放不同类型的数据。可以通过下标来对列表进行访问,当下标 值为非负数时,从前往后访问计算下标值,第一个元素下标为0;当下标为负数时,从后往前计算下标值,最后一个元素小标为-1。还可以通过“,”者“..”来访问多个元素。通过<<操作符,可以向列表中添加元素。列表中还可以添加列表形成多维列表。

def list = ['a', 'b', 'c']
assert list[1]=='b'
assert list[-1]=='c'
list <<'d'
assert list[-1]=='d'
assert list[1,3]==['b','d']
assert list[1..3]==['b','c','d']
def multilist=[[1,2],[3,4]]
assert multilist[1][1]==4

        数组

        Groovy重用了列表的符号。需要通过as操作符强制转换或者在定义时显示指定数组类型,还可以创建多维数组,数组的访问与列表一样。

String[] strs= ['one', 'two', 'three']
def strs= ['one', 'two', 'three'] as String[]
int[][] nums=[[1,2],[3,4],[5,6]]

        映射

        在其他语言中也叫字典或关联数组,映射将键和值关联起来,用“:”分隔键和值,用“,”分隔键值对,用“[]”将所有的键值对包围起来。Groovy中默认映射为java.util.LinkedHashMap的实例。有两种访问映射的方式,一种是通过将键做为下标放入“[]”中,另一种是通过将映射变量与键通过“.”连接起来。如果访问不存在的元素,会返回null。在不进行特殊处理的情况下,对于不能明确识别类型的键都会被当做字符串。这样对于想将变量的值做为键而直接将变量名传入时,键不会得到正确的解析。此时需要将变量名用“()”包围起来,这样就会将变量的值做为键,而不会将变量名做为键。
def strstonum= ['one':1, 'two':2, 'three':3]
assert strstonum['one']==1
assert strstonum.two==2
assert strstonum.four==null

def key='four'
def test=[key:4]
assert !test.containsKey('four');
assert test.containsKey('key');

def key='four'
def test=[(key):4]
assert test.containsKey('four');
assert !test.containsKey('key');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值