本文更偏向于有一定java基础的人学习,主要区分groovy 语言和java的区别。
当然,没有java基础您也可以学习groovy,请跳转 :Groovy 零基础入门
如果不想配置Groovy环境:Groovy在线编程
下载地址:https://groovy.apache.org/download.html
下载完直接安装。
安装完成,在cmd中输入:groovysh 以验证是否安装成功。
Groovy 是一种基于 Java 平台的面向对象语言。在Groovy中,所有java代码都支持。
// 注释和java中一样
// def 定义任何类型变量
def ex = new Example();
// 行尾分号可不写
println(ex.mul(3))
// 方法调用括号可不写
println ex.mul(4)
// 默认类和方法是pulic,字段是private
class Example {
int n = 2
def mul(x) {
return x*n
}
}
用$符号插入变量
def name = '小明' // 单引号,里面只能是字符串
def age = 20
def xiaoming = "我叫$name,今年 $age 岁" // 双引号,可以有$
println xiaoming // 输出内容:我叫小明,今年20岁
类中字段赋值
class Example {
static void main(String[] args) {
def st = new Student(name: 'John',ID:1);
}
}
class Student {
String name
int ID;
}
def list = ['USA', 'UK', 'FRANCE', 'INDIA']
list[0] = 'USA1'
println list.get(0)
def map = ['key':'value']
println map.get('key')
// Range类型
def range = 1..5 // 相当于1、2、3、4、5
def range1 = 5..<8 // 相当于5、6、7
// 闭包相当于封装一个代码块
def ab = { a,b -> println a+b }
ab(2,3) // 打印 5
def xxx = { println '你好' }
xxx() // 打印 你好
def xxx1 = { String s -> println s }
xxx1('你好') // 打印 你好
// 第一种循环
def list = [1,2,3,4,5]
list.each {
println it
}
// 第二种循环
for ( i in 0..2 ) {
println("hello Groovy")
}
// 第三种循环
3.times {
println("hello Groovy")
}
// 第四种循环
0.upto(2) {
println("hello Groovy")
}
// 除此之外,java的while也支持
def reg1 =~ 'he*llo'
def reg2 = /he*llo/
println "类型是: ${reg1.class}" // 类型是: java.util.regex.Pattern
println "类型是: ${reg2.class}" // 类型是: java.lang.String
println "hello".matches(reg1) // true
println "hello".matches(reg2) // true
=~ 可以得到 java.util.regex.Matcher
==~ 可以得到布尔类型
def val1 = "hello" =~ "he*llo"
println val1.class // java.util.regex.Matcher
print val1.matches() // true
def val2 = "hello" ==~ "he*llo"
print val2 // true
在类中程序从main方法开始执行,没有类就直接从上而下执行
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
println(st.DisplayMarks());
}
}
interface Marks {
void DisplayMarks();
}
class Student implements Marks {
int StudentID
int Marks1;
void DisplayMarks() {
println(Marks1);
}
}
可以使用 implement 关键字以与接口类似的方式实现特征。
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
println(st.DisplayMarks());
}
}
trait Marks {
void DisplayMarks() {
println("Display Marks");
}
}
class Student implements Marks {
int StudentID
int Marks1;
}
示例xml: 1.xml
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thrillertype>
<format>DVDformat>
<year>2003year>
<rating>PGrating>
<stars>10stars>
<description>Talk about a US-Japan wardescription>
movie>
<movie title = "Transformers">
<type>Anime, Science Fictiontype>
<format>DVDformat>
<year>1989year>
<rating>Rrating>
<stars>8stars>
<description>A schientific fictiondescription>
movie>
collection>
读取1.xml
import groovy.xml.MarkupBuilder
import groovy.util.*
class Example {
static void main(String[] args) {
def parser = new XmlParser()
def doc = parser.parse("D:\\1.xml");
doc.movie.each{ bk->
print("Movie Name:")
println "${bk['@title']}"
print("Movie Type:")
println "${bk.type[0].text()}"
print("Movie Format:")
println "${bk.format[0].text()}"
print("Movie year:")
println "${bk.year[0].text()}"
print("Movie rating:")
println "${bk.rating[0].text()}"
print("Movie stars:")
println "${bk.stars[0].text()}"
print("Movie description:")
println "${bk.description[0].text()}"
println("*******************************")
}
}
}
import groovy.json.JsonOutput
class Example {
static void main(String[] args) {
def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
new Student(name: 'Mark',ID:2)])
println(output);
}
}
class Student {
String name
int ID;
}
// 输出结果:[{"name":"John","ID":1},{"name":"Mark","ID":2}]