Groovy基础语法

来源:https://www.jianshu.com/p/8127742e0569

1.Groovy中的变量

  • 1.1、变量的类型:基本类型(java中的int,float,double,byte,char,long,short)和对象类型(String等) (Groovy中最终都是对象类型)
int x = 10
println x.class //结果为:class java.lang.Integerdouble 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则由编译器自行推导变量的类型
  • 1.3、强类型定义方式和弱类型定义方式的选择:

变量就是用于自己的类或者自己的模板而不是应用于其他类或者其他模块,推荐使用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中的一样
  • 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 oneline two
line three '''def trebleStr2 = '''
line oneline two
line three '''def trebleStr3 = '''\
line oneline two
line three '''println trebleStr
println trebleStr2
println trebleStr3println trebleStr.class  //class java.lang.String/* trebleStr2比trebleStr多了一行空格,trebleStr3与trebleStr结果相同
line oneline two
line three line oneline two
line three
line oneline 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. 2.3.1、java.lang.String原有的方法
  2. 2.3.2、DefaultGroovyMetnods:是Groovy对所有对象的一个扩展
  3. 2.3.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.3.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(注意结果包含空格)
  • 2、switch/case
//与java中一致
def name = "hello groovy"String subHello(String str) {if (str.contains("hello")) {return str - "hello"} else {return str}
}println subHello(name) // groovy(注意结果包含空格)

3.3、循环逻辑

  • 1、while循环
与java中的while循环一致
def sum = 0
while(sum<10){println sum++
}

2、for循环

/**范围中的for循环*/
def sum = 0
for (i in 0..9) {sum += i
}
println sum //45sum = 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

一、Groovy语法(一):基础语法相关推荐

  1. python turtle基本语法_Python 基础语法-turtle篇

    Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...

  2. jsp java语法_JSP基础语法

    Java JSP 的 JSP基础语法 在本章中,我们将了解和学习JSP语法.并了解JSP开发涉及的简单语法(即元素)的基本用法. 为了方便演示,使用Eclipse创建一个动态Web项目:jspsynt ...

  3. [PHP语法]PHP基础语法与数据类型

    基础语法: php是一门弱类型编程语言 在.php文件中php代码需要包含在<?php 和 ?> 之间,html可以和php混合编写 语句必须以;分号结束 变量名前面必须包含$,变量名可以 ...

  4. Python语法教程-基础语法01

    目录 1. Python应用 2. 在Linux中写python 3. Python基础语法 1. 注释 2. 变量定义及类型 3. 格式化输出 4. 用户输入 5. 运算符 6.数据转换 7. 判断 ...

  5. java 多线程语法_Java基础语法之多线程学习笔记整理

    众所周知,利用好多线程机制,可以大大提高系统整体的并发能力以及性能,而且线程间的切换和调度的成本小.因此,多线程是Java学习者必须掌握的语法重点.本文为大家整理了进程和线程.实现多线程方式.设置和获 ...

  6. css html 语法,CSS基础语法

    CSS为HTML标记语言提供了一种样式描述,定义了其中元素的显示方式.CSS在Web设计领域是一个突破.利用它可以实现修改一个小的样式更新与之相关的所有页面元素.关于css语法你知道有哪些?下面yjb ...

  7. Scala语法(一) 基础语法(变量常量判断循环数组集合)

    前言 在前面的章节中, 我们介绍了如何在Eclipse内安装Scala环境. 本章开始, 我们将讲解下Scala的基本语法. PS: 1. 个人虽然没有想转Scala语言开发的思想, 但是近来Scal ...

  8. python判断语法_Python基础语法——代码规范判断语句循环语句

    Python基础语法 代码的执行顺序 从上到下 从左到右 代码规范 模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 ...

  9. Markdown语法学习-基础语法

    前言 本人是一名普通二本的在读大一学生,准备在机械.编程.嵌入式开发等这一些方面深耕.现在也在准备经营属于自己的博客.因为是新手小白,没有什么基础,所以在前期会发一些比较基础的内容,在网上都是可以随便 ...

  10. python基础语法25_Python基础语法习题参考(0-9关)

    第0关 练习-打印皮卡丘-参考 请你使用**print()函数**和**'''**将下面的皮卡丘打印出来.皮卡丘字符画可以直接复制步骤1里的. ``` へ /| /\7 ∠_/ / │ / / │ Z ...

最新文章

  1. 2015/6/1站立会议(补发)
  2. 对于58同城自动登陆的补充【主要是代码】
  3. captura录屏没声音_电脑录屏有哪些好用的软件呢?
  4. Java结合POI清洗Excel
  5. RobHess的SIFT代码解析之RANSAC
  6. [转载] 说说JSON和JSONP,也许你会豁然开朗
  7. oracle ebs mom,OracleEBS-OAF开发笔记
  8. 企业需要的C++程序员
  9. linux 文件系统cache,终于找到一篇详解Linux文件系统Cache的文章
  10. java输出一副扑克牌_JAVA编一副扑克牌
  11. nginx mozilla_如何开始为Mozilla贡献力量
  12. byteofpython中文gitbook_Gitbook快速简明教程
  13. 从0开始的Python学习006流程控制
  14. 条件判断_判断疑似陨石应具备什么条件下,才能判断陨石真伪
  15. windows 域的安装方法
  16. VS2010 SP1 编译QT4.8.0 x64版本
  17. 设计师胡晓丹的创作历程
  18. ES 矩阵查询(Adjacency matrix aggregation)
  19. JS获取跨域的cookie实例
  20. 计算长方体体积(3分)

热门文章

  1. Chapter 09–Storage Structure and Relationships
  2. 比word更适合编写方案文档的工具Latex
  3. Unity-ShaderGraph学习笔记第一步: 如何打开ShaderGraph 制作全息效果Shader
  4. 快速EDAS字体嵌入问题
  5. (Java)类的接口实验
  6. javaWeb课程设网上报名系统
  7. React Native 警告 Animated: `useNativeDriver` is not supported 的解决方案
  8. Flink获取外部传递参数的两种方式
  9. WWDC20 Session 清单(06-23)
  10. 迅为i.MX6ULL 开发板开机进度条修改文档