当前位置: 首页 > news >正文

Groovy 入门

Groovy 学习资料:
https://www.bootwiki.com/groovy/index.html
https://pan.baidu.com/s/1CKleLGL_s-VM7r17jJw3mA?pwd=om66


1.为什么Groovy比较帅?
1)Groovy是java平台上的脚本语言,抽象程度更高。
可以更简单快速地开发,可以编写更上的代码。
2)与java语言无缝集成,可称为“超级java”
使用”类java“语法,java程序员可以快速过度
groovy与java二进制兼容,都生成字节码,所以可以与使用java语言所编写的框架和组件完美集成,并且效率安全方面比其他脚本语言要高
groovy对象就是java对象,使用与jdk相同的API
可以保护整个java产业在java上的巨大投资
3)在中小型项目中可以替代java,在大型java项目中可以嵌入groovy应用

2.Groovy 的特征
1)Groovy = java - 重复的样板代码
+ 可选的动态类型
+ 闭包(closures)
+ 领域规范语言(DSL)
+ 生成器(builders)
+ 元编程(metaprogramming)
2) groovy 是没有类型/修饰符/return/lterator,不需要导入集合的java.groovy 丢掉了许多java的包袱
3)不能确定变量类型时将变量类型设为Object
4) DSL:domain specific languages
5) 生成器:可以生成XML/HTML/Swing树状数据结构
6)元编程:运行时对类增加行为,类似于AOP

3.Eclipse的Groovy插件
1)Help -> software updates -> find and install -> search for new features -> new remote site
2)name:Groovy
url:http://dist.codehaus.org/groovy/distributions/update/
参考文档:http://t.csdn.cn/DsVEs


4.Groovy 数值
1)Groovy的一切都是对象。可以自动装箱与拆箱
2)整数123,-12,0都是Integer类的对象
定义变量(使用动态类型):
def price=100
等同于:Integer price = new Integer(100)
100.times{println 'Hello'} // 打印100次
语句可以不用";"结尾
3)浮点数据1.5,-3.14 都是BigDecimal类的对象
4)数值类型:
Integer 15
Long 100L, 100l
Float 1.23F, 4.22f
Double 1.23D, 4.22d
java.math.BigInteger 123G, 123G
java.math.BigDecimal 1.23G, 1.23g, 1.23

5)表达式与运算符
1)a==b 等价 a.equals(b)
2)Groovy的"==="就是java的"=="
3)Groovy支持操作符重载,重载运算符对应的方法就是操作符重载
4)"<<"操作符被重载,以支持向集合添加项
6)基于方法的运算符
assert 4+3==7 //4.plus(3)
assert 4-3==1 //4.minus(3)
assert 4*3==12 //4.multiply(12)
assert 4%3==1 //4.mod(3)
assert 4**3==64 //4.power(3)
assert 4/3==1.333333 //4.div(3)
assert 4.intdiv(3)==1 //整除
assert !(4==3) //!(4.equals(3))
assert 4!=3 //!4.equals(3)
assert !(4<3) //4.compareTo(3)<0
assert !(4<=3) //4.compareTo(3)<=0
assert 4>3 //4.compareTo(3)>0
assert 4>=3 //4.compareTo(3)>=0
assert 4<=>3==1 //4.compareTo(3)
assert 4<=>8==-1 //4.compareTo(3)
assert 4<=>4==0 //4.compareTo(3)

5.Groovy 集合概述
1)Groovy直接在语言内使用集合
不需要导入专门的类,也不需要初始化对象
集合是语言本身的本地成员
2)每个Groovy集合都是java.util.Conllection 或 java。util.Map的实例
3)List, String, StringBuffer, Range, Map, File Matcher 都使用统一的size()方法获取长度

6.Groovy 正则表达式
1)正则表达就是在Groovy中是本地语言级别的支持
def aRegex = ~'lxt'
println aRegex.class //输出: class java.util.regex.Pattern
def mat = 'lxt' = ~'lxt'
println mat.class //输出: class java.util.regex.Matcher
2)"~"开头的字符串是模式Pattern对象

7. Groovy 调用闭包
1)闭包是一个可执行的代码块
2)闭包在调用的时候才会执行
3)闭包内默认it,it是闭包的单个隐含参数
参数化闭包:
def bClosure={
println 'hello ${it}'
}
bClosure.call('tets')
bClosure('tets')
bClosure 'tets'

8.Groovy类分析
1)类/方法默认是public修饰符
2)默认情况下Groovy编译的类属性是私有的
3)变量与方法使用动态类型
4)Groovy自动提供构造函数,构造函数接受一个名称-值对的映射,名称-值对与类的属性相对应。不用初始化对象的每个属性
5)生成标准的setter和getter方法
6)可以通过"."语法间接地访问属性
7)在进行属性操纵时总是会调用setter和getter方法,即使直接通过"."语法访问属性也是如此
8)在java中这样只会输出所有对象的默认toString()实现,包类名@hashcode
9)覆盖默认的toString()实现,让输出效果更好

9.GroovySQl概述
1)GSQL结合利用闭包和迭代器,把资源管理的复旦转移到Groovy框架本身,从而简化HDBC编程
2)不用关闭Connection,也不用关闭ResultSet
3)Groovy把迭代机器变成隐含的,使用起来更简单

建立数据链接
1)import groovy.sql.*
def db = 'jdbc:mysql://主机/数据数据库?userUnicode=true&characterEncoding=UTF-8'
def user = 'root' //账户名
def password = '123456' // 用户密码
def driver = 'com.mysql.jdbc.Driver' //驱动
def sql = Sql.newInstance(db,user,password,driver)
//需要把mysql的驱动jar包拷贝至项目lib目录下

数据库的CRUD
sql.execute("delete from toys")
def searchToyName = 'toy1'
sql.eachRow("select * from toys where toyName=?",[searchToyName]){
toy-> println '\t\t'+ toy.toyName+ ':' + toy.unitPrice
}

操作DataSet
1) DataSet类是sql类的子类(可用Jad查看)
def toys = sql.dataSet('toys') //dataSet()参数是表名
toys.add(toyName:'toy2',unitPrice:'100')
toys.each{toy->
println '\t\t'+ toy.toyName+ ':' + toy.unitPrice
}

http://www.jsqmd.com/news/612740/

相关文章:

  • 数据管理新范式:如何用WeChatMsg实现聊天记录的隐私保护与本地存储
  • 为什么禁止我请求别的网站的接口?——跨域与CORS
  • MMDetection3D实战:从零开始用PointPillars训练KITTI数据集(附可视化避坑指南)
  • 若依(ruoyi)中Bootstrap-Table的高级封装与实战应用
  • 圣女司幼幽-造相Z-Turbo效果对比评测:Z-Image-Turbo基模 vs LoRA微调版生成质量分析
  • 5种核心技术突破Cursor使用限制:实现高效AI编程助手的完整方案
  • Coze工作流进阶:如何设计一个能自动回复的客服机器人
  • 3大维度提升设计效率:ReplaceItems脚本实战指南
  • 编写程序实现智能充电宝适配设备电流,自动调节输出电流,保护手机电池。
  • Java加密实战Classfinal Java Agent解决源码加密
  • 终极解决方案:Windows 10 OneDrive 彻底卸载工具深度解析
  • 加载(Load) 和 切分(Split)
  • 绕过公司IT限制:用PyTorch 2.7镜像快速搭建个人AI实验环境
  • **RISC-V架构下的高效汇编编程实践:从零开始构建一个嵌入式计数器应用**在现代嵌入式系统开发中,**
  • AI语音转换技术实战指南:从入门到精通Retrieval-based Voice Conversion
  • 2026云南可靠企业年会摄影摄像公司推荐:昆明年会跟拍/昆明拍摄团队/昆明摄影摄像/昆明摇臂导播/昆明旅游跟拍/选择指南 - 优质品牌商家
  • 千问3.5-27B批量处理:OpenClaw实现CSV数据智能清洗
  • 如何用OK-WW轻松实现鸣潮自动战斗与声骸刷取:完整指南
  • 数据主权与记忆保存:WeChatMsg让微信聊天记录成为永恒的数字遗产
  • 网盘直链下载:突破限速困境的本地解析解决方案
  • 南麟LN1138 300mA低压差 CMOS电压稳压器芯片 多种封装形式
  • 2026年温州婚恋服务机构参考指南:精准匹配、一对一服务、线下活动、情感咨询、形象管理、高端婚恋服务、温州有缘婚恋公司以专业守护婚恋初心 - 海棠依旧大
  • 电容是什么?一个“快充快放”的微型充电宝翱
  • FLUX.小红书极致真实V2开源镜像教程:本地运行无网络依赖,隐私数据零上传
  • Cursor Pro完整功能破解限制:机器ID重置与配置管理技术深度解析
  • OpenClaw日志审计:记录SecGPT-14B的所有安全分析操作
  • 保姆级教程:手把手教你用entity-manager和dbus-sensors配置OpenBMC温度传感器
  • 同一个需求,我先出技术方案,再让AI出方案——差距让我沉默了偬
  • 2026.4.9 - 呓语
  • react-native-fetch-blob高级功能指南:多部分上传与进度监控