【Groovy语言基础总结】编译原理、多层嵌套json解析
1. Groovy是什么?
Groovy是一种面向对象编程语言,也是纯粹的脚本语言,一种用于Java虚拟机的动态语言,groovy完全兼容Java语法。
2. Groovy的编译原理以及为什么是完全兼容Java语法?
编译所写的test.groovy脚本后,会在项目包下产生一个out目录,里边是 .groovy经过编译运行后转换成了相应的 .class文件,
每一个.class都有一个静态main方法,每个groovy脚本都会生成一个static main函数,
- 当运行groovy脚本时,其实是用java去执行main方法,
- groovy脚本中的代码都会被加载到Object run()函数中,通过对.class编译运行后返回输出的内容。
groovy代码:
经过编译运行后生成的.class代码:
3. Groovy 变量定义:
定义变量使用 def 关键字,但不是必须,为了增加代码可读性,写一下也不费事。
定义变量:
def v = 'helle'
println v
println(v)
结尾可以不加分号,输出也可以不加括号。
4. groovy定义函数:
有返回类型的函数,不用加def关键字去定义函数;无返回类型的函数,必须加def关键字。
可以不用return,则最后一行代码值的类型就是函数的返回类型。
def fun1(){
'hello'
}
println fun1()
println(fun1())
5. 引号使用说明:
- 单引号’ '和双引号" ":使用单引号的话不会对 转义,但用双引号的话会对 转义,但用双引号的话会对 转义,但用双引号的话会对转义,即会先求值。
def v = 'hello'
def s1 = "v is $v"
println v
- Groovy里边 ‘’’ ‘’’ 和 “”" “”" 的区别:
如果直接引用 ${}变量内容的话,需要区分windows和Linux环境:
Windows下:必须使用双引号"“” “”",${}变量引用才起作用
Linux下:使用单引号’‘’ ‘’'和双引号"“” “”"都可以,${}变量引用都起作用
6. 循环:
3种写法:for(i;<;++) , for in,while
* for(i=0;i<5;i++){
println "hello"
}
* for (i in 1..5){
println "hello"
}
7. 数据类型(1.容器类:List,Map,Range 2.闭包 3.java的基本数据类型)
- List:
/变量定义:List变量由[]定义,其元素可以是任何对象
def List1 = ['hello',true,1,false]
println(List1)
println List1[0] //获取第1个数据
println List1[1] //获取第2个数据
println List1[2] //获取第3个数据
println List1[3] //获取第4个数据
println( "集合长度:" + List1.size())
//赋值
List1[6] = 2
List1<<20 //往List1里添加数据
println List1
println "List长度:"+ List1.size()
- Range:
def range = 5..10
println(range)
range.size()
range.remove(1)
range.clear()
range.iterator()
def v1 = range.get(1)
range.contains(10)
range.last()
- 闭包(Closure):一种数据类型,它代表了一段可执行的代码
def fun1 = {
v1 -> //箭头前边是参数变量,后边是相关代码
def s = "闭包," + v1
}
println(fun1.call()) //调用方式1
println(fun1.call("Param1")) //调用方式2
println(fun1("Param2"))
- map:
def map = [v1: "haha", v2: "heihei", v3: "gaga"]
println map
println("数据长度:" + map.size())
println(map.keySet())
println(map.values())
println("v1的值:" + map.v1)
println("v1的值:" + map.get("v1"))
//map元素赋值
map.put("v4", "dada")
Iterator it = map.iterator()
while (it.hasNext()) {
println "map遍历: " + it.next()
}
map.containsKey("v1")
map.containsValue("heihei")
map.clear()
Set set = map.keySet(); //把 map 的key值转换为 set
使用Groovy进行JSON解析:
import groovy.json.JsonSlurper
JsonSlurper slurper = new JsonSlurper()
def jsonPara = slurper.parseText(json)
def jsonPara1 = jsonPara['id']
println(jsonPara1)
用Groovy遍历嵌套的json
import groovy.json.JsonSlurper
def json = '''{
"upperlevel1": {
"lowerlevel1": "ABC",
"lowerlevel2": "DEF"
},
"upperlevel2": {
"lowerlevel1": "HIJ",
"lowerlevel2": "KLM"
}
}'''
def slurped = new JsonSlurper().parseText(json)
slurped.each{ key, value ->
value.each {k, v ->
println "${v}"
}
}
可以使用 ‘’’ 对语句进行任意换行
三目运算:
def aa = 'hello'
def bb = aa?: "hello world"
println(bb)
数据类型转换 asType:
def v1 = "1"
def v2 = v1 as int
def v3 = v1.asType(Integer)
println v2
println v3
switch case 运用:
level = 19
def score
switch (level) {
case 1..9:
score = 100
break
case 10..19:
score = 90
break
case 20..29:
score = 80
break
default:
throw new IllegalArgumentException()
}
println score