一、Groovy语法(一):基础语法

Groovy基础语法

1.Groovy中的变量

  • 1.1、变量的类型:基本类型(java中的int,float,double,byte,char,long,short)和对象类型(String等) (Groovy中最终都是对象类型)
int x = 10
println x.class //结果为:class java.lang.Integer

double y = 3.14
println y.class  //结果为:class java.lang.Double

//由此可见,Groovy中的基本类型最终会被编译器包装成对象类型
  • 1.2、变量的定义:强类型定义方式和弱类型def定义方式
def x1 = 10
def y1 = 3.14
def str = 'groovy study'

println x1.class  //class java.lang.Integer
println y1.class  //class java.math.BigDecimal
println str.class //class java.lang.String

//强类型定义及定义的时候写明变量的类型,而def则由编译器自行推导变量的类型
  • 强类型定义方式和弱类型def定义方式的选择:
    变量就是应用于自己的类或者自己的模块而不会应用于其它类或者其他模块,推荐使用def类型,这样可以随时动态的转换为其它类型;
    变量要用于其它类或是其它模块,强烈建议使用强类型定义方式。使用强类型定义的方式不能动态转换类型,才能使外界传入或者调用的时候不会对于数据的类型产生疑惑,这样就保证外界传入的数据一定是我们想要的正确的类型的数据。
def x1 = 10
println x1.class  //class java.lang.Integer
x1 = "dynamic type conversion"
println x1.class // class java.lang.String

// def定义的类型,相当于Object类型,可以随时转换类型

2、字符串详解

  • 2.1、String:和java中的String一样
  • 2.2、GString
  • 2.2.1 常用的三种定义方式
  • 单引号定义:
//1.单引号定义的就是java中的String,内容即为''内的字符串,并且不可更改
def str = 'a single string'
println str.class  //class java.lang.String

//有特殊字符同样的通过反斜杠转义
def str1 = 'a single \'special\' string'
  • 三个单引号定义:
//2.三个单引号定义的是有格式的字符串,会直接按照我们写的格式进行输出,而不用像java中进行拼接
def trebleStr = '''line one
            line two
line three '''

def trebleStr2 = '''
line one
            line two
line three '''

def trebleStr3 = '''\
line one
            line two
line three '''

println trebleStr
println trebleStr2
println trebleStr3

println trebleStr.class  //class java.lang.String
 
/* trebleStr2比trebleStr多了一行空格,trebleStr3与trebleStr结果相同
line one
            line two
line three 

line one
            line two
line three 
line one
            line two
line three
 */
 
 //注意上面trebleStr、trebleStr2、trebleStr3的区别
  • 双引号定义(最常用的方式):可扩展的字符串
def name = "Groovy"
println name.class  //class java.lang.String
def sayHello = "Hello $name"  
println sayHello    //输出:Hello Groovy
println sayHello.class    //class org.codehaus.groovy.runtime.GStringImpl

//扩展内容还可以是表达式
def sum = "the sum of 2 and 3 equals ${2 + 3}"
println sum  //输出:the sum of 2 and 3 equals 5

//String 和 GString之间可以相互调用和传递,不需要考虑它们之间的转换问题
  • 2.3、String方法来源
  1. java.lang.String原有的方法
  2. DefaultGroovyMethods:是Groovy对所有对象的一个扩展
  3. StringGroovyMethods:继承自DefaultGroovyMethods,重写了DefaultGroovyMethods中的许多方法,使这些方法更加适用于String使用
  • 2.4、Groovy中常用的String方法

2.4.1.普通类型参数

  • 字符串填充:
// center(Number numberOfChars,CharSequence padding) ,将字符串作为中心进行填充
def str = "groovy"
println str.center(5,"a") //结果:groovy
println str.center(6,"a") //结果:groovy
println str.center(7,"a") //结果:groovya
println str.center(8,"a") //结果:agroovya
println str.center(9,"a") //结果:agroovyaa
println str.center(8)     //结果: groovy ,不传padding代表以空格填充

//PS:当numberOfChars小于或等于str本身的长度时,不进行填充操作,大于则用pandding扩展至长度numberOfChars,从字符串的右边(尾)进行填充,再到左边(头)

//padLeft(Number numberOfChars,CharSequence padding) ,在字符串的左边进行填充

//c. padRight(Number numberOfChars,CharSequence padding),在字符串的右边进行填充
  • 字符串比较
def str = "groovy"
def str2 = "Groovy"
println str.compareTo(str2)             //32   结果大于0,str大于Str2
println str.compareToIgnoreCase(str2)  //0   结果等于0,str等于忽略大小写的Str
println str2.compareTo(str)          //-32  结果小于0,str2小于str
println str > str2                  //true  可用操作符直接进行比较
println str == str2.toLowerCase()  //true
  • 获取字符串中的字符
def str = "groovy"
println str.getAt(0) //g
println str.getAt(0..1) //gr
println str[0] //g
println str[0..1] //gr
  • 字符串中的减法(取差集)
def str = "groovy"
def str2 = "hello"
def str3 = "hello groovy"
def str4 = "groovy hello "

println str.minus(str2) //groovy,   str中没有包含str2 
println str.minus(str3) //groovy,   str中没有包含str3
println str3.minus(str2) // groovy, str3中包含了str2 (注意结果包含了空格)
println str3.minus(str4) //hello groovy str3z中没有包含str4
println str3 - str      //hello ,str3z中包含了str(注意结果包含了空格)
  • 其它还有很多方法用到时看看即可
def str = "hello groovy"
println str.reverse() //yvoorg olleh,字符串反转
println str.capitalize()//Hello groovy,首字母大写
println str.isNumber() //false,是否全是数字

def str2 = "1234"
println str2.toInteger() //1234
println str2.toBigDecimal() // 1234
println str2.toDouble() //1234.0
//等一系列转化类型方法

2.4.2.闭包类型参数

方法中将闭包作为参数使用,可到闭包使用讲解中查看

3、逻辑控制

  • 3.1、顺序逻辑
//单步往下执行
def name = "groovy"
println "hello $name"
  • 3.2、条件逻辑
  1. if/else
//与java中一致
def name = "hello groovy"

String subHello(String str) {
    if (str.contains("hello")) {
        return str - "hello"
    } else {
        return str
    }
}

println subHello(name) // groovy(注意结果包含空格)
  1. switch/case
//java中switch只能传入int类型、byte,char和short类型能自动提升为int类型、String类型和后来扩展的enum类型

//在groovy中,switch可以传入任性类型的数据进行匹配
String judgeType(Object x) {
    def result
    switch (x) {
        case "string":
            result = "x is string"
            break
        case [4, 5, 6, 7,'inList']: //列表(数据结构中讲解)
            result = "x is in list [4, 5, 6, 7,'inList']"
            break
        case 10..15: //范围range(数据结构中讲解)
            result = "x is in range 10..15"
            break
        case Integer:
            result = "x is Integer"
            break
        case BigDecimal:
            result = "x is BigDecimal"
            break
        case List:
            result = "x is List"
            break
        default:
            result = "no match"
            break
    }
    return result
}

def x = "string"
def x1 = 5
def x2 = 10
def x3 = 3
def x4 = 3.14
def x5 =[4,6]
def x6 ="hi groovy"
def x7 = "inList"
println judgeType(x) //x is string
println judgeType(x1) // x is in list [4, 5, 6, 7,'inList']
println judgeType(x2) // x is in range 10..15
println judgeType(x3) // x is Integer
println judgeType(x4) // x is BigDecimal
println judgeType(x5) // x is List
println judgeType(x6) // no match
println judgeType(x7) // x is in list [4, 5, 6, 7,'inList']
  • 3.3、循环逻辑
  1. while循环
与java中的while循环一致
def sum = 0
while(sum<10){
    println sum++
}
  1. for循环
/*
 *范围中的for循环
 */
def sum = 0
for (i in 0..9) {
    sum += i
}
println sum //45

sum = 0
/*
 *list中的for循环
 */
for (i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
    sum += i
}

println sum //45

/*
 *map中的for循环
 */
for (i in ['java': 1, ' groovy': 2, 'python': 3]) {
    println "key:${i.key} value:${i.value}"
}
//key:java value:1
//key: groovy value:2
//key:python value:3
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 什么是 Groovy? 简言之,Groovy是一种基于JVM(Java虚拟机)的敏捷动态开发语言。它是一种成熟的面...
    北纬26阅读 4,123评论 0 14
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,793评论 2 16
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,726评论 0 10
  • 1)、程序结构:主要是用来还原处理问题的过程的! 顺序结构:处理问题的步骤选择结构:处理问题的条件循环结构:...
    命运丿阅读 898评论 0 0
  • 这是读完王安忆的《长恨歌》的感觉。即使是疼痛,也不是死去活来的痛,也不是痛彻心扉的痛。尽管是逝去的锦绣年华...
    阿霞呐阅读 211评论 0 0