Groovy 基本类型

Groovy 基本类型

官方文档:http://www.groovy-lang.org/syntax.html

字符Characters

不像Java,Groovy没有明确的Characters。但是我们可以有如下三种不同的方式来将字符串作为字符处理

char c1 = 'A'  // 指定char类型
assert c1 instanceof Character

def c2 = 'A' as char  // 使用as操作符进行类型强制转换
assert c2 instanceof Character

def c3 = (char) 'A'  //类型转换
assert c3 instanceof Character

第一种方式通常用于字符被保存在变量中,另外两种通常用于方法调用时一个char值作为参数传递

Numbers

整数

和Java中一样,支持 byte、 char、 short、 int、 long、 java.lang.BigInteger

// 基本类型
byte  b = 1
char  c = 2 
short s = 3 
int   i = 4
long  l = 5

// infinite precision
BigInteger bi =  6

如果使用def关键字定义变量,那么整数的类型将会变化,将使用其容量能够容纳这个数字的类型

def a = 1
assert a instanceof Integer

def b = 2147483647  // Integer.MAX_VALUE
assert b instanceof Integer

def c = 2147483648  // Integer.MAX_VALUE + 1
assert c instanceof Long

def d = 9223372036854775807  // Long.MAX_VALUE
assert d instanceof Long

def e = 9223372036854775808  // Long.MAX_VALUE + 1
assert e instanceof BigInteger

二进制、八进制、十六进制表示

二进制0b

short xShort = 0b11001001
assert xShort == 201 as short

八进制 0

int xInt = 077
assert xInt == 63

byte xByte = 032
assert xByte == 26 as byte

十六进制 0x

long xLong = 0xffff
assert xLong == 65535L

BigInteger xBigInteger = 0xaaaa
assert xBigInteger == 43690g

Double xDouble = new Double('0x1.0p0')
assert xDouble == 1.0d

int xNegativeInt = -0x77
assert xNegativeInt == -119

小数

小数类型和Java一样:float、 double、 java.lang.BigDecimal

// 基本类型
float  f = 1.234
double d = 2.345
assert f instanceof Float

// infinite precision
BigDecimal bd =  3.456

可以使用指数字母eE,后跟可选的+-,和一个整数

assert 1e3  == 1_000.0
assert 2E7  == 20_000_000.0  // 可用_分隔
assert 3e+1 ==     30.0
assert 4E-2 ==      0.04

小数的默认类型是BigDecimal,但给参数类型为float或double的方法传入没有明确类型的数字也是可以的

小数不能用二进制、八进制或十六进制表示

可以使用下划线分隔数字,更容易阅读:

long creditCardNumber = 1234_5678_9012_3456L
double monetaryAmount = 12_345_132.122_345
long hexWords = 0xFFEC_DE5E
long bytes = 0b11010010_01101001_10010100_10010010

类型后缀

assert 123L == new Long("123")
assert 1.23E23D == new Double('1.23E23')

assert 034G.class == BigInteger // octal

数学运算

数学运算的行为以及它们的结果类型

Boolean

def bool = true
boolean bool = true
bool = false

此外,Groovy有特殊的规则(通常称为Groovy真理),用于将非布尔对象强转为布尔值

Lists

Groovy支持java.util.List类型,List变量默认实现是ArrayList,元素可以是不同类型

List list = [1, 2, 3] 
def list2 = [1, "a", list, true] //元素可以是不同类型
assert list2 instanceof ArrayList //List变量默认类型是ArrayList

定义不同类型的List,有两种方式

def linkedList = [2, 3, 4] as LinkedList //使用as定义
LinkedList linkedList2 = [2, 3, 4]
linkedList[0] = 5

可以使用get(index)方法,索引范围 0 ~ list.size() - 1
或使用角标[]访问或修改元素,[]内部的索引可以是整数或负数,负数表示从右向左访问

assert linkedList[1] == 3
assert linkedList[-1] == linkedList.get(2)

使用 << 左移给列表追加元素

list2 << new Date()
assert list2.size() == 5
println(list2[4])  // Fri Aug 18 12:04:39 CST 2017

获取List子集

assert list2[1, 3] == ["a", true]
assert list2[0..2] == [1, "a", list]

多维List

List multiList = [[0, 1],[2, 3]]
assert multiList[1][0] == 2

Arrays

数组的定义:声明类型或强制转换

//定义数组
int[] intArr1 = [1, 2, 3] 
def intArr2 = [1, 2, 3] as int[]

//定义数组,指明长度
def intArr3 = new int[3][2]

//不指明长度
int[][] intArr4;
intArr4 = [[1, 2], [3, 4]]

assert intArr1 instanceof int[] 
assert !(intArr1 instanceof List)

assert intArr1.size() == 3
assert intArr1.length == 3

//赋值
intArr2[1] = 5
assert intArr2[1] == 5

Maps

定义Map

def colors = [red: '#FF0000', green: '#00FF00', blue: '#0000FF']   

使用键检查:当使用键的名称时,我们实际上在Map中定义了字符串键

//使用下标检查
assert colors['red'] == '#FF0000'
//使用属性检查
assert colors.green == '#00FF00'

可以使用数字作为键,因为数字可以清楚地识别为数字,所以Groovy不会像前面的例子那样创建字符串键

def map2 = [1:'one', 2:'tow']  // key的类型为数字
assert map2[1] == 'one'

修改值

colors.green = '#00F0F0'
assert colors.green == '#00F0F0'

使用下标符号或属性添加新的键值对

colors.pink == '#FF00FF'
colors['yellow'] == '#FFFF00'

Map实际类型为java.util.LinkedHashMap

assert colors instanceof java.util.LinkedHashMap

访问不存在的key时返回null

assert colors.unknown == null

使用变量作为键

def key = 'name'
def map3 = [key:'Guillaume'] 
assert !map3.containsKey('name')
assert map3.containsKey('key')

与“Guillaume”名称关联的键实际上是字符串"key",而不是与key变量关联的值

正确写法

def map4 = [(key):'Guillaume']  // key用括号括起来
assert map4.containsKey('name')
assert map4.containsKey(key)

Map的键不能修改

key = 'othername'
assert !map4.containsKey('othername') 
assert !map4.containsKey(key)  // 不再包含key
### Groovy 编程语言基本语法 #### 类与对象 Groovy 是一种面向对象的语言,同时也支持独立脚本开发。可以在同一个文件中混合类定义和脚本逻辑[^1]。 ```groovy class Person { String name int age void sayHello() { println "Hello, my name is $name" } } def person = new Person(name: 'Alice', age: 30) person.sayHello() ``` #### 定义变量与方法 推荐使用 `def` 关键字来声明变量和函数返回值类型,而不是指定具体的静态类型[^4]。 ```groovy def greeting = "Welcome to Groovy!" println(greeting) def addNumbers(a, b) { a + b } println(addNumbers(5, 7)) ``` #### 注释风格 单行注释以两个斜杠开头 (`//`);多行注释采用 C/C++ 风格的 `/* */` 形式。 ```groovy // 这是一个简单的例子 /* * 多行注释也可以这样写 */ ``` #### 控制结构 支持常见的条件判断、循环控制语句,并允许简化表达方式。 ```groovy if (true) { println('This will always be printed') } else { println('Never reached') } for (i in 1..5) { print(i + ', ') // 输出:1, 2, 3, 4, 5, } [1, 2, 3].each { item -> print(item * 2 + ' ') // 输出:2 4 6 } ``` #### 字符串处理 字符串可以用单引号 `' '` 或者双引号 `" "` 表示,在双引号内可以直接嵌入变量或表达式的值。 ```groovy String singleQuoteStr = 'Single quoted string' String doubleQuoteStr = "Double quoted with variable ${greeting}" println(doubleQuoteStr) ``` #### 数据类型的灵活性 不同于 Java 中严格的强类型系统,Groovy 提供了更加灵活的数据类型机制,允许在运行时改变变量的实际类型。 ```groovy def var = 10 // 整数 var = "Now I'm text" // 修改为字符串 println(var.getClass()) // class java.lang.String ``` #### 异常处理 类似于其他 JVM 上的语言,通过 try-catch-finally 结构来进行错误捕捉和资源清理工作。 ```groovy try { throw new Exception("An error occurred!") } catch (Exception e) { println(e.message) } finally { println("Cleanup code here.") } ``` #### 集合操作 提供了丰富的内置 API 来方便地创建和管理列表、映射等复杂数据结构。 ```groovy List list = [1, 2, 3] Map map = ['key': 'value'] list.each { element -> println(element) } map.each { key, value -> println("$key : $value") } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值