Groovy入门

简介: Groovy学习路线

1. 环境构建

官网下载 Groovy,当前最新版本 3.0.7Groovy是一个压缩的工具包,对公工具包解压,并讲 Groovy下的bin路径,配置到本地操作系统环境 path 属性。

20210908095718

20210908095612

1.1. groovysh

Groovy 提供一个交互式编程,groovysh

20210908095756

1.2. IDEA创建Groovy

这里在 Gradle项目中新建 Groovy 项目 模块, Groovy libray 选择 Groovy 的文件路径

  • 创建包名为 xyz.wongs.groovy
  • 编写脚本,这里要选择 Groovy Script

编写我们第一个 Groovy代码,GroovyPython非常类似。


package xyz.wongs.groovy

  

// python 3的语法结构

println('Hello Groovy')

2. 基础语法

2.1. 数据类型

2.2. 数组

Groovy 数组由 Javajava.util.Arrays 工具提供的,所有Java中对数组的操作,在Groov y中同样适用

2.3. 列表

列表是用于存储数据项集合的结构。在 Groovy 中,List 保存了一系列对象引用。List 中的对象引用占据序列中的位置,并通过整数索引来区分。列表文字表示为一系列用逗号分隔并用方括号括起来的对象。groovy 列表使用索引操作符 [] 索引。列表索引从 0 开始,指第一个元素。groovy 中的一个列表中的数据可以是任意类型。这 java 下集合列表有些不同,java 下的列表是同种类型的数据集合。

常用方法


package gvy02

  
// 列表

  

def list = [1,'2',23]

println('【列表输出】'+list)

println('【列表转字符】'+list.toString())

println('【列表长度】'+list.last())

  

2.4. 散列

也称为关联数组、映射、表,是对象引用的无序集合,类似Java中 Map,格式如: ['Key1':'Sam','Key2':'Abram']


package gvy02

  

// 字典 Map

  

def map = ['key1':'Grovy','key2':'Java']

println('【Map输出】'+map)

println('【Map转字符】'+map.toString())

println('【Map元素个数为】'+map.size())

  

for (String s:map.keySet()){

 println('【遍历】'+'Key='+s+' Value = '+map.get(s))

}

  

3. 多线程

Java开发过程中通过J.U.C工具定义多线程,Groovy参考Python脚本并且对Javajava.lang.Thread进行扩展,简化了多线程的定义。 Groovy线程利用闭包进行定义的居多,闭包的方式主要有 Thread.startThread.startDaemon。当然Groovy中也有定时任务,分别是TimerTimerTask,两种方式。

综述, Groovy的多线程开发, 仅仅是进行Thread结构的变化,其他结构均按照Java程序的方式定义。

3.1. 定义


  

package gvy05

  

/**

 * 1、多线程的定义

 */

  

println('【主线程】' + Thread.currentThread().getName())

  

// 1.1 start 模式

Thread.start {

 println('【子线程-start】' + Thread.currentThread().getName())

 'Groovy Project :https://gitee.com/rothschil/pippin'.each {

 print(it)

 }

 println('\n')

}

  

println('https://www.github.com/rothschil/pippin')

  

// 1.2 startDaemon 模式

Thread.startDaemon {

 println('【子线程-startDaemon】' + Thread.currentThread().getName())

 'Groovy Project :https://gitee.com/rothschil/'.each {

 print(it)

 }

 println('\n')

}

  

3.2. 线程同步


def ticket =10

  

def sale ={->

 synchronized (this){

 sleep(100)

 println('[Buy tickets]'+Thread.currentThread().getName()+ ' The remaining votes ' +(ticket--))

 }

}

  

for(x in 1..10){

 def st = Thread.start(sale)

 st.name='TicketSeller -'+x

}

3.3. 定时任务


package gvy05

  

// 定时任务

new Timer('[Timer]').runAfter(1000) {

 for (int i = 0; i < 10; i++) {

 println('【定时任务】' + Thread.currentThread().getName() + ' Groovy Project :https://gitee.com/rothschil/pippin')

 }

}

3.4. J.U.C操作


  

package gvy05

  

import java.util.concurrent.CountDownLatch

  

// JUC 定义两个线程,让线程1 必须要等待线程2 执行完毕后 才能执行

CountDownLatch countDownLatch = new CountDownLatch(1)

  

def firstThread = Thread.start {

 countDownLatch.await()

 println('[The First Thread] ' + Thread.currentThread().getName())

}

  

def secondThread = Thread.start {

 sleep(1000)

 println('[The Second Thread] ' + Thread.currentThread().getName())

 countDownLatch.countDown()

}

// 第一个线程先启动

firstThread

secondThread

  

3.5. 线程池


package gvy05

  

import java.util.concurrent.ExecutorService

import java.util.concurrent.Executors

  

ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())

  

for (x in 1..20) {

 es.submit(() -> {

 println('[ThreadPool]' + Thread.currentThread().getName())

 })

}

4. 更改类型

使用 def关键字定义的所有变量类型都是可以动态更改,这和 Python类似,使用起来比较灵活。


package gvy01

  

def msg = 'Groovy'

println("【1】 msg 对应的类型是 "+ msg.class)

  

msg = 3

println("【2】 msg 对应的类型是 "+ msg.class)

  

msg = 1.3

println("【3】 msg 对应的类型是 "+ msg.class)

  

5. 数据溢出


package gvy01

  
  

def ix1 = Integer.MAX_VALUE+1

  

println("【1】 ix1 对应的类型是 "+ ix1.class +" 变量内容:"+ix1)

  

def ix2 = 21474836499

  

println("【2】 ix2 对应的类型是 "+ ix2.class +" 变量内容:"+ix2)

  

def ix3 = 2342546543634532424324233

  

println("【3】 ix3 对应的类型是 "+ ix3.class +" 变量内容:"+ix3)

6. 异常

Java一样的异常处理方式

  • 检测异常:在编译时检查异常
  • 未经检查的异常:未检查的异常在编译期不检查,而是在运行时检查,如 ArrayIndexOutOfBoundsException
  • 错误:程序永远不能恢复的错误,将导致程序崩溃,如 OutOfMemoryErrorVirtualMachineErrorAssertionError
目录
相关文章
|
7月前
|
存储 SQL JSON
Groovy初学者指南
Groovy是一种基于Java平台的动态编程语言,它结合了Python、Ruby和Smalltalk等语言的特性,同时与Java无缝集成
50 0
|
9月前
|
存储 SQL JSON
【编程语言】Groovy入门指南
【编程语言】Groovy入门指南
508 0
|
10月前
|
Java jenkins 持续交付
01-Groovy-简介及安装
01-Groovy-简介及安装
|
11月前
groovy入门-GString
groovy入门-GString
106 0
《Groovy极简教程》第6章 Groovy与Grails
《Groovy极简教程》第6章 Groovy与Grails
1136 0
《Groovy极简教程》第8章 Groovy:领域特定语言(DSL)
《Groovy极简教程》第8章 Groovy:领域特定语言(DSL)
1281 0
《Groovy极简教程》第4章 Groovy与Java混合编程
《Groovy极简教程》第4章 Groovy与Java混合编程 Groovy跟Java的不同 http://www.groovy-lang.org/differences.html
1360 0
《Groovy极简教程》第3章 Groovy基本语法
《Groovy极简教程》第3章 Groovy基本语法
1091 0
《Groovy极简教程》第5章 SpringBoot集成Groovy与Java混合编程
《Groovy极简教程》第5章 SpringBoot集成Groovy与Java混合编程
1755 0