网站首页 > java教程 正文
读完本文需要5分钟
用 Groovy 编写的任何内容都可以编译成标准的 Java 类文件并在 Java 代码中重用。类似地,用标准 Java 代码编写的内容也可以在 Groovy 中重用。Groovy是没有类型的Java,实际在编译成class文件的时候,会转化成真实的类型。
task hello {
println 'hello world'
}
基本语法
● Groovy 注释标记和Java 一样,支持//或者/**/
● Groovy 语句可以不用分号结尾。Groovy 为了尽量减少代码的输入
● Groovy 中支持动态类型,即定义变量的时候可以不指定其类型。Groovy 中,
变量定义可以使用关键字def
def variable1 = 1 //可以不使用分号结尾
def varable2 = "I am a person"
def int x = 1 //变量定义时,也可以直接指定类型
函数也不需要指定类型
def sum(a,b){
return a+b
}
函数可以有默认值。
def repeat(val,repeat=3){
for(i in 0..<repeat){
println "This is ${i}:${val}"
}
}
字符串:
1 单引号''中的内容严格对应Java 中的String,不对$符号进行转义
def singleQuote='I am $ dolloar' //输出就是I am $ dolloar
2 双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。
def doubleQuoteWithoutDollar = "I am one dollar" //输出 I am one dollar
def x = 1
def doubleQuoteWithDollar = "I am $x dolloar" //输出I am 1 dolloar
3 三个引号'''xxx'''中的字符串支持随意换行 比如
def multieLines = ''' begin
line 1
line 2
end '''
循环
for(i in 0..5){
println("xxx")
}
基本数据类型
作为动态语言,Groovy 世界中的所有事物都是对象。所以,int,boolean 这些Java 中
的基本数据类型,在Groovy 代码中其实对应的是它们的包装数据类型。比如int 对应为
Integer,boolean 对应为Boolean
容器类
Groovy 中的容器类很简单,就三种:
● List:链表,其底层对应Java 中的List 接口,一般用ArrayList 作为真正的实
现类。
● Map:键-值表,其底层对应Java 中的LinkedHashMap。
● Range:范围,它其实是List 的一种拓展。
对容器而言,我们最重要的是了解它们的用法。下面是一些简单的例子:
List 类
除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:
def collect=["a","b","c"]
collect.add(1);
collect<<"come on";
collect[collect.size()]=100.0
Collection使用类似数组下标的方式进行检索:
println collect[collect.size()-1]
println collect[5]
groovy支持负索引:
println collect[-1] //索引其倒数第1个元素
println collect[-2] //索引其倒数第2个元素
Collection支持集合运算:
for (int i=0;i<collect.size();i++){
println(collect[i])
}
collect=collect+5 //在集合中添加元素5
println collect[collect.size()-1]
collect=collect-'a' //在集合中减去元素a(第1个)
println collect[0] //现在第1个元素变成b
同样地,你可以往集合中添加另一个集合或删除一个集合:
collect=collect-collect[0..4] //把集合中的前5个元素去掉
println collect[0] //现在集合中仅有一个元素,即原来的最后一个元素
println collect[-1] //也可以用负索引,证明最后一个元素就是第一个元素
Map 类
def map=['name':'john','age':14,'sex':'boy']
添加项:
map=map+['weight':25] //添加john的体重
map.put('length',1.27) //添加john的身高
map.father='Keller' //添加john的父亲
可以用两种方式检索值:
println map['father'] //通过key作为下标索引
println map.length //通过key作为成员名索引
遍历一个map。
map.each {
println(it.getKey())
println(it.getValue())
}
Range 类
定义一个类
class Person {
def name
def age
String toString(){//注意方法的类型String,因为我们要覆盖的方法为String类型
"$name,$age"
}
如果你使用javabean风格来做同样的事,起码代码量要增加1倍以上。
我们可以使用默认构造方法实例化Person类:
def person1=new Person()
person1.name='kk'
person1.age=20
println person1
也可以用groovy的风格做同样的事:
def person2=new Person(['name':'gg','age':22]) //[]号可以省略
println person2
## 闭包
def c={
println("xxx")
}
c.call();
文件操作
### Java传统操作:
FileReader fr=new FileReader("E:/phsftp/evdokey/evdokey_201103221556.txt");
BufferedReader br=new BufferedReader(fr);
String line="";
String[] arrs=null;
while ((line=br.readLine())!=null) {
arrs=line.split(",");
System.out.println(arrs[0] + " : " + arrs[1] + " : " + arrs[2]);
}
br.close();
fr.close();
groovy操作:
读文件
def targetFile = new File('C:\\Users\\cuizaixi\\Desktop\\testFile.txt')
targetFile.each {
String oneLine->
println(oneLine)
}
写文件
def srcFile = new File('C:\\Users\\cuizaixi\\Desktop\\testFile.txt')
def targetFile = new File('C:\\Users\\cuizaixi\\Desktop\\testTargetFile.txt')
targetFile.withOutputStream{ os->
srcFile.withInputStream{ ins->
os << ins //利用OutputStream 的<<操作符重载,完成从inputstream 到OutputStream
//的输出
}
}
Xml操作
//第一步,创建XmlSlurper 类
def xparser = new XmlSlurper()
def targetFile = new File("C:\\Users\\cuizaixi\\Desktop\\test.xml")
def gpathResult = xparser.parse(targetFile)
def book4 = gpathResult.value.books.book[3]
println(book4)
如果大家觉得好,大家转载的同时,也动动小手点点文章左上角的订阅,
关注“AndroidDeveloper”,或者加群“556062010”联系到我,
这样就能每天第一时间收到作者推送的文章啦,谢谢大家的关注。
作者:头条号 / AndroidDeveloper
猜你喜欢
- 2025-05-08 探索Java世界的新天地:JDK最新特性解读
- 2025-05-08 Java 15 新特性:文本块(java纯文本)
- 2025-05-08 贼好用的 Java 工具类库(java常用工具包)
- 2025-05-08 Java编程学习入门、Java语言学习、Java入门必看
- 2025-05-08 Java Web开发中常见漏洞及防护(java上传漏洞)
- 2025-05-08 轻量级的数据交换语言——JSON(数据交换和接口调用)
- 2025-05-08 Java程序语言之灵魂一(程序的灵魂算法)
- 2025-05-08 java正则表达式的使用(java正则怎么用)
- 2025-05-08 以后我准备告别String.format()了,因为它不够香!
- 2025-05-08 SpringBoot解决请求报文含有特殊字符的问题
你 发表评论:
欢迎- 05-08Hive-数据类型(hive数据类型和文件格式)
- 05-08SpringBoot系列Mybatis之ResultMap、ResultType返回结果使用姿势
- 05-08Linux shell变量&运算符(shell 命令中使用变量)
- 05-08详解Xss 及SpringBoot 防范Xss攻击(附全部代码)
- 05-08MyBatis-Plus码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
- 05-08linux运维中特殊符号的应用与实践
- 05-08深入理解JAVA I/O系列一:File(java.io.fileinputstream)
- 05-08探索Java世界的新天地:JDK最新特性解读
- 最近发表
-
- Hive-数据类型(hive数据类型和文件格式)
- SpringBoot系列Mybatis之ResultMap、ResultType返回结果使用姿势
- Linux shell变量&运算符(shell 命令中使用变量)
- 详解Xss 及SpringBoot 防范Xss攻击(附全部代码)
- MyBatis-Plus码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
- linux运维中特殊符号的应用与实践
- 深入理解JAVA I/O系列一:File(java.io.fileinputstream)
- 探索Java世界的新天地:JDK最新特性解读
- Java 15 新特性:文本块(java纯文本)
- 贼好用的 Java 工具类库(java常用工具包)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)