其他分享
首页 > 其他分享> > Groovy语法

Groovy语法

作者:互联网

1.变量的类型

在groovy中,没有基本数据类型,只有对象类型,表面上我们定义基本数据类型,但实际都会帮我们 装箱处理:

image

无论定义基本数据类型还是对象类型,其实都会帮我们装成对象类型,但是对程序员来说写代码没有影响

2.变量的定义

强类型定义方式

数据类型 变量名 = 初始值

弱类型定义方式

根据值可以推断出变量的数据类型,所以类型不用显示声明,直接用def即可

def 变量名 = 初始值

image

用def这种弱类型定义变量可以随便改变变量类型,如果不希望别人改变数据类型用强类型,如果是你自己使用并且想要随意改变类型那么就用弱类型

3.字符串

4.流程控制

流程控制分为:顺序结构、分支结构、循环结构

image

5.闭包

6.列表

7.映射

8.范围

//定义一个范围
def r = 2..5
println r.size()

def r2 = 3..<8//3,4,5,6,7
println r2.size()

//操作
println r[1]//通过索引获取元素
println r.contains(4) //判断是否包含某个具体的数字
println r2.from //范围开始的数字
println r2.to //范围结束的数字

//通过查看源码发现range实际就是list的一种,与列表的操作一致
//有了列表为什么还要用范围?轻量级的列表,如果定义连续范围可以使用范围

//遍历
r.each { println it }

for (ele in r2) {
    println ele
}

9.面向对象

10.Groovy对Json的操作

11.Groovy对xml的操作

package com.zt.xml

import groovy.xml.MarkupBuilder
import groovy.xml.XmlSlurper

final String xml = '''
<students>
    <student id="1">
        <name>lili</name>
    </student>
    <student id="2">
        <name>nana</name>
    </student>
</students>
'''
//解析xml
def xs = new XmlSlurper()
def students = xs.parseText(xml)
//获取节点的值:
println students.student[0].name.text()

//获取属性的值
println students.student[1].@id

//xml的遍历
def list = []
students.student.each {
    it -> list.add(it.name.text())
}
println list.toListString()

//生成xml
def s = new StringWriter()
//生成xml的核心类
def mb = new MarkupBuilder(s)
//创建根节点:看上去像一个方法,但实际不是方法,只是语法长这样-伪方法
//()中传入这个节点的属性{}中写入这个节点下的节点
mb.students() {
    //第一个节点
    student(id: "1") {
        name(a: "a", "张三")
    }
    student(id: "2") {
        name("李四")
    }
}
println s

12.Groovy对文件的操作

class Person implements Serializable {
    String name
    Integer age
}
//操作普通文件
def file = new File("/Users/zt/Downloads/filetest.txt")
file.eachLine { println it } //it:每行数据
println "============="
//获取文件中所有内容
println file.getText()

//返回的是一个列表,将每行内容放入列表中
def list = file.readLines()
println list.toListString()

//读取部分内容
println file.withReader {
    char[] buffer = new char[2]
    it.read(buffer)//读取2个字符的内容
    return buffer
}

//文件复制
def copy(String srcpath, String descpath) {
    //确定目标文件
    def descfile = new File(descpath)
    if (!descfile.exists()) {
        //如果目标文件不存在,我们创建目标文件
        descfile.createNewFile()
    }
    //复制
    new File(srcpath).withReader {
        def lines = it.readLines()
        descfile.withWriter {
            lines.each {
                line -> it.append(line + "\r\n")
            }
        }
        return true
    }
}
println copy("/Users/zt/Downloads/filetest.txt", "/Users/zt/Downloads/filetest111aa.txt")


//将对象写入文件
def saveobject(Object obj, String path) {
    //先将文件封装为对象
    def file = new File(path)
    if (!file.exists()) {
        file.createNewFile()
    }
    file.withObjectOutputStream {
        it.writeObject(obj)
    }
    return true
}

def s = new Person(name: "aaa", age: 12)
saveobject(s, "/Users/zt/Downloads/saveobject.txt")

//从文件中奖对象读取出来
def readObject(String path) {
    def obj = null//读取的对象
    //创建文件路径对应的文件对象
    def file = new File(path)
    //判断文件不存在返回null
    if (file == null || !file.exists()) {
        return null
    }
    file.withObjectInputStream {
        obj = it.readObject()
    }
    return obj
}
def s2 = (Person) readObject("/Users/zt/Downloads/saveobject.txt")
println s2.name

标签:Groovy,name,语法,Person,delegate,println,class,def
来源: https://www.cnblogs.com/ZT-666/p/16365056.html