Groovy 基本语法

news2024/12/27 11:33:24

一、简介

在这里插入图片描述
类型转换:当需要时,类型之间会自动发生类型转换: 字符串(String)、基本类型(如int) 和类型的包装类(如Integer)
类说明:如果在一个groovy 文件中没有任何类定义,它将被当做script 来处理,也就意味着这个文件将被透明的转换为
一个Script 类型的类,这个自动转换得到的类将使用原始的groovy 文件名作为类的名字。groovy 文件的内容被打包进
run 方法,另外在新产生的类中被加入一个main 方法以进行外部执行该脚本。

二、案例

在这里插入图片描述
提示:方法调用时,在不含有歧义的地方可以省略方法调用时的括号。这类似于使用${变量名}时,括号在不引起歧义的地
方可以省略是一样的:如

def num1=1;
def num2= 2;
println "$num1 + $num2 = ${num1+num2}"

引号说明

def num1=1;
def num2=2;
def str1="1d"; //双引号
def str2='dsd'; //单引号
//双引号运算能力,单引号用于常量字符串,三引号相当于模板字符串,可以支持换行
println "$num1 + $num2 = ${num1 + num2}"
//基本数据类型也可以作为对象使用,可以调用对象的方法
println(num1.getClass().toString())
println(str1.getClass().toString())
println(str2.getClass().toString())

三个语句结构

Groovy 支持顺序结构从上向下依次解析、分支结构(if…else、if…else if …else…、switch…case、for、while、do…while)
具体参考官网:http://www.groovy-lang.org/semantics.html#_conditional_structures

类型及权限修饰符

Groovy 中的类型有:
1.原生数据类型及包装类
在这里插入图片描述

2.类、内部类、抽象类、接口
3.注解
4.Trait: 可以看成是带有方法实现的接口
权限修饰符: public、protected、private

拓展:Groovy 类与Java 类之间的主要区别是:

  • 1.没有可见性修饰符的类或方法自动是公共的(可以使用一个特殊的注释来实现包的私有可见性)。
  • 2.没有可见性修饰符的字段将自动转换为属性,不需要显式的getter 和setter 方法。
  • 3.如果属性声明为final,则不会生成setter。
  • 4.一个源文件可能包含一个或多个类(但是如果一个文件不包含类定义的代码,则将其视为脚本)。脚本只是具有一些特殊
    约定的类,它们的名称与源文件相同(所以不要在脚本中包含与脚本源文件名相同的类定义)。

提示: 有关Groovy 中各种各样的数据类型和权限修饰符及Goovy 与Java 区别请参考:
http://www.groovy-lang.org/objectorientation.html#_modifiers_on_a_property

集合操作

Groovy 支持List、Map 集合操作,并且拓展了Java 中的API,具体参考如下方法:
List:

  • add():添加某个元素
  • plus():添加某个list 集合
  • remove():删除指定下标的元素
  • removeElement():删除某个指定的元素
  • removeAll(): 移除某个集合中的元素
  • pop():弹出list 集合中最后一个元素
  • putAt():修改指定下标的元素
  • each():遍历
  • size(): 获取list 列表中元素的个数
  • contains(): 判断列表中是否包含指定的值,则返回true
    Map:
  • put():向map 中添加元素
  • remove():根据某个键做移除,或者移除某个键值对
  • +、-:支持map 集合的加减操作
  • each():遍历map 集合
    请参考官网:http://www.groovy-lang.org/syntax.html#_number_type_suffixes
    提示:可以把不同的基本类型添加到同一集合中。

类导入

Groovy 遵循Java 允许import 语句解析类引用的概念。

import groovy.xml.MarkupBuilder
def xml = new MarkupBuilder()
assert xml != null

Groovy 语言默认提供的导入

import java.lang.*
import java.util.*
import java.io.*
import java.net.*
import groovy.lang.*
import groovy.util.*
import java.math.BigInteger
import java.math.BigDecimal

这样做是因为这些包中的类最常用。通过导入这些样板代码减少了。
参考官网地址:http://www.groovy-lang.org/structure.html#_imports

异常处理

Groovy 中的异常处理和java 中的异常处理是一样的。

def z
try {
def i = 7, j = 0
try {
def k = i / j
assert false
} finally {
z = 'reached here'
}
} catch ( e ) {
assert e in ArithmeticException
assert z == 'reached here'
}

参考官网地址: http://www.groovy-lang.org/semantics.html#_try_catch_finally

闭包

  • 闭包:Groovy 中的闭包是一个开放的、匿名的代码块,它可以接受参数、也可以有返回值。闭包可以引用其周围作用
    域中声明的变量。
  • 语法:{ [closureParameters -> ] statements }
    其中[ closureParameters-> ]是一个可选的逗号分隔的参数列表,参数后面是Groovy 语句。参数类似于方法参数列表,这些参数可以是类型化的,也可以是非类型化的。当指定参数列表时,需要使用-> 字符,用于将参数与闭包体分离。
    参考:http://www.groovy-lang.org/closures.html

闭包调用方式: 闭包是groovy.lang.Closure 的实例。它可以像任何其他变量一样分配给一个变量或字段。
闭包对象(参数)
闭包对象.call(参数)

def isOdd = { int i -> i%2 != 0 }
assert isOdd(3) == true
assert isOdd.call(2) == false
def isEven = { it%2 == 0 }
assert isEven(3) == false
assert isEven.call(2) == true

特殊说明: 可以把闭包当作一个对象,作为参数传递给方法使用

//无参闭包
def run(Closure closure){
println("run start....")
closure()
println("run end....")
}
run {
println "running......"
}
//有参闭包
def caculate(Closure closure){
def num1=1;
def num2=3;
println("caculate start....")
closure(num1,num2)
println("caculate end....")
}
caculate {x,y -> println "计算结果为:$x+$y=${x+y}"} //在build.gradle文件中我们见到的很多都是闭包格式的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DragGAN-点对点的手动P图

原文网站link以及论文链接: https://vcai.mpi-inf.mpg.de/projects/DragGAN/ https://arxiv.org/pdf/2305.10973.pdf 简介 深度生成模型近年在合成随机真实感图像方面取得了不错的成绩。在现实世界的应用中,这种基于学习的图像合成方法中一个关键功能是…

文心一言 VS 讯飞星火 VS chatgpt (31)-- 算法导论5.2 3题

三、利用指示器随机变量来计算掷n 个骰子之和的期望值。 文心一言: 为了计算掷n个骰子之和的期望值,我们需要先了解一个重要的概念:指示器随机变量。 指示器随机变量是一种特殊的随机变量,它只有两个取值:0和1。通常…

《计算机网络——自顶向下方法》精炼——3.7(2)

读书有三到:谓心到,眼到,口到。——明朱熹 文章目录 对链接吞吐量的简化描述高带宽路径的TCP公平性 对链接吞吐量的简化描述 为了简化对一条TCP连接吞吐量的描述,我们首先忽略连接过程中处于慢启动状态的时间,因为这一…

AWD练习平台搭建 附虚拟机资源

文章目录 前言基本环境平台搭建系统安装平台部署环境启动实现效果 参考后记 前言 最近需要准备线下AWD了,但是没有那么多金币每天上BugKu的PVP在线AWD对战进行练习,于是想着可以自己搭建一个团队内部使用的AWD攻防平台,浅浅的记录一下 基本…

基于SSM框架的学生信息管理系统

项目介绍 主要功能: 基于Spring、SpringMVC、Mybatis框架LayUI完成了这么一套系统 ①角色登录:管理员登录、教师登录、学生登录 ②基本管理:学生管理、教师管理、班级管理、专业管理、教室管理 ③教务管理:课程管理、开课管理、课…

Packet Tracer - 综合技能练习

Packet Tracer - 综合技能练习 拓扑 地址分配表 32-1913 2^132^8*2^5 256*32 32个C 16 16 (1)172.16.128.0~172.16.143.255 255.255.240.0 (2)172.16.144.0~172.16.159.255 255.255.240.0 G0/0 172.16.159.254 G0/1 172.16.143.254 设备 接口 IP 地址 子网掩码 …

深入理解API网关Kong:初识Kong网关

深入理解API网关Kong:初识Kong网关 介绍 Kong是一个开源的、可扩展的、微服务 API 网关,它已经在全球范围内的各种规模的组织中广泛使用。Kong的设计原则是为了处理服务到服务的通信,通过提供功能丰富的平台,实现对API的全面管理…

Verilog基础之一、触发器实现

目录 一、触发器简介 1.1 触发器作用 1.2 触发器信号 1.3 使用规范 1.4 Vivado综合触发器 二、代码实现 三、综合结果 一、触发器简介 1.1 触发器作用 触发器是工程中基础的单元结构也是相当重要的组成,时序电路的实现离不开触发器。触发器是具有存储功能的器件&…

chatgpt赋能python:Python升序排序不用sort

Python 升序排序不用 sort 如果你在Python编程领域有多年的经验,那么你肯定对sort函数非常熟悉。sort是Python自带的用于列表或数组进行排序的函数。sort函数可以根据元素的值进行升序排序或降序排序,非常方便。但是,如果你需要在不使用sort…

【小白教程】Docker安装使用教程,以及常用命令!

【小白教程】Docker安装使用教程,以及常用命令! - 带你薅羊毛最近调试Docker内容,顺手记录一下,我常用的几个命令!这里总结一下,方便自己也同时方便大家使用! 内容慢慢完善更新!如有…

Linux 之JavaEE定制篇-搭建JavaEE 环境

Linux 之JavaEE 定制篇-搭建JavaEE 环境 注意 本篇软件链接提供 链接:https://pan.baidu.com/s/1y5qqQvWGQ-iz5M2WUrjD3A?pwdv5l2 提取码:v5l2 如果嫌自己下载麻烦或者难找可以考虑 概述 如果需要在Linux 下进行JavaEE 的开发,我们需要…

极速版手机蓝牙APP开发

极速版手机蓝牙APP开发 零、效果展示一、环境介绍二、开发过程控件布局代码逻辑蓝牙部分摇杆部分其他部分 三、整体优化四、结束语 零、效果展示 “这是一个充满科技风的手机蓝牙APP” 一、环境介绍 App Inventor是一款谷歌公司开发的手机编程软件,主要支持各种…

vue 实现 dragover拖拽到页面底部时元素自动向下滚动

公司要求做一个类似于企业微信的日程功能 然后呢 日程组件 需要能拖拽时间段创建 这里 我们使用 dragstartdragenddragover 记录被拖动位置完成的 如果没接触过 可以查看我的文章 vue记录鼠标拖拽划过位置并将划过位置变色 这里的话 其实可以在dragover中做操作 界面上 drag…

【C++ 基础篇:20】:类的 (const)static 静态成员:面试题:实现一个类,计算程序中创建出了多少个类对象?

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

区块链基础之共识机制

1.1共识机制 1.1.1核心定义 区块链上的共识机制主要解决由谁来构造区块,以及如何维护区块链统一的问题 1.1.2共识机制分类 1.1.3 共识算法 1.1.3.1 POW(工作量证明) 代表项目:BTC 由于不同的节点接受数据有所区别,为了保证数据一致性&a…

改善录音直播收音环境,只需一副监听耳机,丁一号G800S体验

现在很多人已经习惯了使用蓝牙耳机,但在平时直播、录音的时候,把蓝牙耳机当作耳返工具并不好用,经常有延迟高之类的问题,影响我们的录音效果和沟通体验,这时候需要配备一个监听耳机,才能够了解到实际的收音…

斐波那契数列题解(非递归c++方法实现)

在做信奥赛(信息学奥赛)中的for循环题目时,有一道斐波那契数列,想到的第一个方法是使用递归求解;因为以往题目最多使用的就是递归形式,但鉴于该题目在for循环题目堆,所以就思考了一些新方法&…

果推断17--基于反事实因果推断的度小满额度模型学习笔记

目录 一、原文地址 二、一些问题 2.1如何从RCT随机样本过渡到观测样本因果建模? 2.2反事实学习的核心思想 2.3度小满的连续反事实额度模型 Mono-CFR 2.4Mono-CFR代码实现(待补充) 2.5CFR学习 2.5.1CFR 2.5.2DR-CFR 参考 一、原文地…

2.C++多线程--危险点分析

1.detach使用时分析 使用detach时&#xff0c;子线程一定不要传入指针 #include<iostream> #include<thread> using namespace std;void my_print(const int& num1,const char* str) {cout << num1 << " " << str << endl; …

MySQL 事务处理语言 TCL

文章目录 事务处理语言 TCL事务简介事务控制并发事务的隔离挑战脏读不可重复读幻读 事务的隔离级别未提交读&#xff08;READ-UNCOMMITED&#xff09;提交读&#xff08;READ COMMITED&#xff09;可重复读&#xff08;REPEATABLE READ&#xff09;可串行化&#xff08;SERIALI…