Groovy学习笔记-2.Groovy相关基础信息
更多代码相关的内容可以参考:https://github.com/zclhit/groovy_learning/tree/main
代码结构
注释
#!注释,只允许出现在groovy脚本的第一行,通过这种注释可以方便Unix shell进行定位启动并运行
//单行注释
/* xxxxx */多行注释
/** xxxxx */doc风格的注释,可以使用groovydoc生成注释文档
自动导入类
groovy会自动导入:
import groovy.lang.*
import groovy.util.*
import java.lang.*
import java.util.*
import java.net.*
import java.io.*
import java.math.BigInteger
import java.math.BigDecimal
而java只会自动导入:
import java.lang.*;
断言
assert (true)
assert 1==1
def x=1
assert x==1
def y=1; assert y==1
1.断言可以显示当前程序的运行状态
2.断言可以替换注释语句,用来表示结果符合自己的期望
开始写程序
定义类
class Book {private String titleBook (String theTitle) {title = theTitle}String getTitle() {return title}
}
和Java类很像
使用类
Book gina = new Book('Groovy in Action')
assert gina.title == 'Groovy in Action'
assert getTitleBackwards(gina) == 'noitcA ni yvoorG'String getTitleBackwards(book) {title = book.getTitle()return title.reverse()
}
定义Beans
groovyBean可以:
- 自动生成访问方法
- JavaBeans简化访问方式
- 事情处理器简化使用方式
class BookBean {String title //属性
}def groovyBook = new BookBean()//通过显示的方法调用来使用属性
groovyBook.setTitle('Groovy conquers the world')
assert groovyBook.getTitle() == 'Groovy conquers the world'//通过groovy的快捷方式来使用属性
groovyBook.title = 'Groovy in Action'
assert groovyBook.title == 'Groovy in Action'
文本处理
GStrings变量替换
def nick = 'Gina'
def book = 'Groovy in Action'
assert "$nick is $book" == 'Gina is Groovy in Action'
数字对象
Groovy中的数字是类对象,而不是专有的类型
def x = 1
def y = 2
assert x + y == 3
assert x.plus(y) == 3
assert x instanceof Integer
groovy中的集合
1.Lists
//罗马数字列表
def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII']
//访问列表
assert roman[4] == 'IV'
//扩张列表
roman[8] = 'VIII'
assert roman.size() == 9
2.映射maps
map通过k-v形式取值,lists根据位置取值。
def http = [
100 : 'CONTINUE',
200 : 'OK',
400 : 'BAD REQUEST' ]
assert http[200] == 'OK'
http[500] = 'INTERNAL SERVER ERROR'
assert http.size() == 4
3.范围ranges
设置开始的点和结束点,生成一个range,并且可以随时进行倒转的操作
def x = 1..10
assert x.contains(5)
assert !x.contains(15)
assert x.size() == 10
assert x.from == 1
assert x.to == 10
assert x.reverse() == 10..1
4.代码块:闭包
闭包是groovy中非常常见但是在java中类似于函数式编程的东西。
一个闭包就是一个花括号围起来的语句块,闭包有一个可选的参数列表,通过->进行参数传递
例如[1,2,3].each{ entry -> println entry}就行一个典型的闭包形式
5.结构控制语句
//在一行的if语句
if (false) assert false//null表示 false
if (null) {assert false
} else {assert true
}//典型的while
def i = 0
while (i < 10) {i++
}
assert i == 10//迭代一个range
def clinks = 0
for (remainingGuests in 0..9) {clinks += remainingGuests
}
assert clinks == (10 * 9) / 2//迭代一个列表
def list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for (j in list) {assert j == list[j]
}//以闭包为参数的each方法
list.each() { item ->assert item == list[item]
}//典型的switch
switch (3) {case 1: assert false; breakcase 3: assert true; breakdefault: assert false
}
在Java环境中运行groovy
groovy代码和java代码都是运行在jvm中,有两种运行方式:
-
groovyc编译*.groovy代码,生成java的*.class文件,并将这些class文件放置到java类路径中,使用java类加载器进行加载
-
通过groovy类加载器直接加载groovy代码,不会生成*.class,但是会生成java.lang.Class对象实例。
groovy在源代码级别增强了java,但是在字节码上和java又是一样的。
GDK:Groovy类库
groovy类库是jdk的扩展,增加了一些新的类,并提供了java类所不具备的新的功能。比如GDK中的size方法,就可以作用于不同的对象并产生不同的结果。
Groovy允许为对象分配动态的方法,这个就是用MetaClass进行控制的
groovy的生命周期
java是如何在运行时理解.groovy文件的呢?
groovy的代码并不是一行一行被转换的,而是整个文件被完整的转化为java可以执行的类。
groovy的类加载器可以直接从*.groovy的文件中加载类,在放入jvm缓存之前就已经完成了转换和生成的相关工作。
groovy的动态特性
groovy是在编译后就确定的语言,那么动态特性是如何实现的呢?
因为groovy的方法调用是通过:
getMetaClass().invokeMethod(this, "foo", EMPTY_PARAM_ARRAY)的方式进行调用的,那么就相当于是交给了对象的MetaClass进行处理
这个MetaClass就可以在运行时进行拦截、重定向、增加删除方法等操作行为
另一种动态代码的方式是将要执行的动态代码放置在字符串中
def code= '1+'
code += System.getProperty('os.version')println codeprintln evaluate(code)
相关文章:
Groovy学习笔记-2.Groovy相关基础信息
更多代码相关的内容可以参考:https://github.com/zclhit/groovy_learning/tree/main 代码结构 注释 #!注释,只允许出现在groovy脚本的第一行,通过这种注释可以方便Unix shell进行定位启动并运行 //单行注释 /* xxxxx */多行注释 /** xxxxx…...
android 12.0Settings去掉二级三级菜单搜索功能
1.概述 在12.0由于客户定制开发需求,需要去掉Settings里面的搜索功能,主页面的搜索功能,在前面的章节已经讲了 这里需要去掉二级三级菜单的搜索功能,需要从搜索功能流程分析去掉搜索功能 2.Settings去掉二级三级菜单搜索功能核心代码 packages/apps/Settings/src/com/and…...
【业务功能篇03】Springboot+POI 带图片的导出Excel
继前面介绍的 Springboot+mybatis-plus+POI实现表单数据导出Excel 这篇实现功能介绍,后期业务又有新的导出需求,就是在导出表单数据的同时,在表单下面位置,放入对应一个业务的图片数据,这些图片数据,就是结合表格的数据,在前端的表格下面的位置展示的,比如针对时间-数量…...
“智慧赋能 强链塑链”——打造电力特色智慧供应链体系
构建业务数智化、资源集约化、运营一体化、发展绿色化的智慧供应链体系,是电力企业实现智慧供应链建设的使命和目标。同时,在国内外双循环、一带一路、建立统一大市场的政策背景推动下,企业经营和居民生活对电力的需求仍然强劲并持续增长&…...
服了呀,被现在的00后卷麻了....
现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...
带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示-------之 阿里云平台项目建造。
第一篇章: (13条消息) 带你开发一个远程控制项目---->STM32标准库阿里云平台传感器模块远程显示。_海口飞鹏岛科技有限公司的博客-CSDN博客 本次文章是指引开发者进行开发阿里云平台建造设备项目,可观看UP主教程,完成如下&#x…...
MoveIt2中使用trac_ik
文章目录 1.下载trac_ik的源码2.安装 NLopt library3.编译源码4.使用4.1.已经配置好的项目4.2.新使用moveIt_setup_assistant进行配置时 在ros1moveit1中,使用trac_ik是很简单的一件事情:【TRAC-IK Kinematics Solver】 但是在Ros2中,无论Mov…...
搭建服务器的主流中间件有哪些?如何在外网访问内网的服务?
计算机业内人士对于搭建服务器的中间件并不陌生,apache、tomcat、IIS、nginx 都是比较常用的搭建服务器的中间件,它们之间还是有一些区别差异的。今天就说说这些中间件之间有哪些区别,以及如何利用快解析实现内网主机应用让外网访问。 首先说…...
MapperFacade使用
一、MapperFacade是Orika框架中的一个核心类,它用于管理对象映射。使用MapperFacade可以方便地将一个对象转换为另一个对象。以下是使用MapperFacade的基本步骤: 创建一个MapperFactory对象。 使用MapperFactory对象注册对象之间的映射关系。 调用Mapp…...
@开源爱好者,字节跳动这项技术,正式宣布开源了
告诉大家一个好消息,字节跳动的云原生数据仓库 ByConity 正式宣布开源了。 ByConity 是一个云原生数据仓库,由字节跳动数据平台团队在国际知名开源数据库管理系统 ClickHouse 社区版本基础上开发。 早期,字节跳动的数据存储使用的是 ClickHou…...
React学习笔记八-受控与非受控组件
此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第八篇,主要介绍非受控组件与受控组件。 目录 1.非受控组件 1.1表单提交案例 1.2案例的总结 2.受控组件 2.1受控组件案例 2.1受控案例总结 1.非受控组件 1.1表单提…...
gcc编译
一、GCC简介 GCC(GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器,因为它原本…...
华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)
华为云HECS云服务器即云耀云服务器,类似于阿里云和腾讯云的轻量应用服务器,HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月,华为云百科分享华为云HECS云服务器租用费用及CPU性能详解: 目录 华为云…...
Redis---事务管道
目录 一、Redis的事务是什么? 1.1 Redis和关系型数据库事务的区别 二、怎么玩Redis事务? 2.1 正常执行: 2.2 放弃事务 2.3 全体连坐 2.4 冤头债主 2.5 watch监控 三、管道 3.1 为什么会引入管道这个概念呢?我们首先来看一…...
Python的内置数据类型(通过故事来学习)
有一天,小李在学习Python语言时,听到了一个关于内置数据类型的故事。 Python内置了很多数据类型,比如整数、浮点数、字符串、布尔值等等。这些数据类型可以帮助我们更方便地处理数据,提高代码的效率。 小李很好奇,就…...
继瑞吉外卖后的又一个项目——SpringBoot+Vue的前后端博客系统
文章目录 博客系统项目介绍前言项目演示前台演示后台演示 组织结构后端组织结构前端组织结构 技术选型前端技术后端技术架构图系统架构图业务架构图 模块介绍前端模块后端模块 环境搭建开发工具开发环境项目运行 未完待续结语 博客系统项目介绍 前言 本项目已开源在Gitee 后端…...
2023暑期实习历程总结
一.前言 Hello 大家好久不见,已经三个月左右没有更新了,那我这三个月在干什么呢?自2023年3月中旬开始到现在五月底这期间接近三个月的时间里,我一直在进行2023暑期实习的投递和面试。这期间投递了包括各大中厂(阿里&am…...
UART-STM32
UART-STM32 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 第一步,开启时钟,把需要用的USART和GPIO的时钟打开 第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入 第三步,配置USART,直接使…...
jetson nano csi摄像头 tensorrt 运行yolov8检测
jetson nano csi摄像头 tensorrt 运行yolov8检测 基于原始onnx模型的tensorrt预测1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine3. 使用python3 tensorrt 读取csi摄像头进行预测修改on…...
提升国际品牌影响力:小企业海外网红营销实战指南
在当今数字化时代,小企业们越来越意识到海外市场的巨大潜力。与此同时,海外网红的崛起也为小企业提供了一个独特的机会,通过与他们合作,迅速拓展国际市场并吸引更多目标受众的关注。然而,对于许多小企业来说࿰…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
