Groovy详解(特点用法及安装使用)

Groovy详解(特点用法及安装使用)-mikechen

Groovy定义

Groovy是Apache 旗下的一种基于JVM的面向对象编程语言,既可以用于面向对象编程,也可以用作纯粹的脚本语言。

Groovy最终也是要编译成class文件然后在jvm上执行,所以Java语言的特性Groovy都支持。

 

Groovy特点

  • 是一种敏捷的动态Java虚拟机语言,与所有现有Java类和库无缝集成;
  • Groovy提供了更加灵活简单的语法,大量的语法糖以及闭包特性,可以让你用更少的代码来实现和Java同样的功能;
  • 为Java开发人员提供了几乎零学习曲线的现代编程特性;
  • Groovy是动态编译语言广泛用作脚本语言,主要优势之一就是它的生产力;
  • 凭借强大的处理原语、OO能力和Ant DSL,使编写shell和构建脚本变得容易;
  • 在开发web、GUI、数据库或控制台应用程序时,减少脚手架代码,从而提高开发人员的工作效率;
  • 通过支持单元测试和开箱即用的模拟来简化测试;

 

Groovy安装

1.下载Groovy

下载地址:http://groovy-lang.org/download.html

 

2.配置环境变量

下载后解压即可,然后配置环境变量,和java的一样。

1)系统高级设置

Groovy详解(特点用法及安装使用)-mikechen

2)环境变量

Groovy详解(特点用法及安装使用)-mikechen

 

3)新建GROOVY_HOME:值为刚才解压的路径;

4)修改PATH:在最后追加%GROOVY_HOME%\bin;

 

Groovy用法

1.变量

Groovy中用def关键字来定义变量,可以不指定变量的类型,默认访问修饰符是public。

def m = "mikechen";

2.方法

方法使用返回类型,或def关键字定义。

def hello() {

    println ("hello world");

    return 1;

}

3.数据类型

Groovy 除了字符串之外,Groovy 也支持有符号整数、浮点数、字符等。

class Example {
 static void main(String[] args) {
 String str = "Hello"; // 字符串
 int x = 5; // 整数
 long y = 100L; // 长整型
 float a = 10.56f; // 32位浮点数 
 double b = 10.5e40; // 64位浮点数
 char c = 'A'; // 字符
 Boolean l = true; // 布尔值,可以是true或false。
 println(str);
 println(x);
 println(y);
 println(a);
 println(b);
 println(c);
 println(l);
 }
}

运行结果如下:

$ groovy hello.groovy
Hello
5
100
10.56
1.05E41
A
true

打印变量

上面用 def 关键字来定义变量,当然也可以用一个确定的数据类型来声明一个变量,我们可以用下面的几种方式来打印变量:

class Example {
 static void main(String[] args) {
 // 初始化两个变量
 int x = 5; 
 int X = 6; 
 
 // 打印变量值
 println("x = " + x + " and X = " + X); 
 println("x = ${x} and X = ${X}");
 println('x = ${x} and X = ${X}');
 }
}

运行结果如下:

$ groovy hello.groovy
x = 5 and X = 6
x = 5 and X = 6
x = ${x} and X = ${X}

从这里我们可以看出 Groovy 在单引号的字符串里面是不支持插值的,这点非常重要,很多同学在使用 Pipeline 脚本的时候经常会混淆。除此之外,还支持三引号:

class Example {
 static void main(String[] args) {
 // 初始化两个变量
 int x = 5; 
 int X = 6; 
println """
x = ${x}
X = ${X}
"""
println '''
x = ${x}
X = ${X}
'''
 }
}

运行结果如下:

$ groovy hello.groovy
x = 5
X = 6
x = ${x}
X = ${X}

可以看出 Groovy 里面三引号支持双引号和单引号两种方式,但是单引号同样不支持插值,要记住。

4.类

Groovy类非常类似于Java类,如下所示:

task method <<{
    def p = new Person()
    p.increaseAge 5
    println p.age
}
class Person {                       
    String name                      
    Integer age =10
    def increaseAge(Integer years) { 
        this.age += years
    }
}

运行结果为:

15

Groovy类与Java类有以下的区别:

  • 默认类的修饰符为public;
  • 没有可见性修饰符的字段会自动生成对应的setter和getter方法;
  • 类不需要与它的源文件有相同的名称,但还是建议采用相同的名称;

5.条件语句

在我们日常工作中条件判断语句是必不可少的,即使在 Jenkins Pipeline 脚本中也会经常遇到,Groovy 里面的条件语句和其他语言基本一致,使用 if/else 判断:

class Example { 
 static void main(String[] args) { 
 // 初始化变量值
 int a = 2
		
 // 条件判断
 if (a < 100) { 
 // 如果a<100打印下面这句话
 println("The value is less than 100"); 
 } else { 
 // 如果a>=100打印下面这句话
 println("The value is greater than 100"); 
 } 
 } 
}

运行结果如下:

$ groovy hello.groovy
The value is less than 100

6.循环语句

除了条件判断语句之外,循环语句也是非常重要的,Groovy 中可以使用三种方式来进行循环:while、for语句、for-in语句,如下:

class Example {
 static void main(String[] args) {
 int count = 0;
 println("while循环语句:");
 while(count<5) {
 println(count);
 count++;
 }
 println("for循环语句:");
 for(int i=0;i<5;i++) {
	 println(i);
 }
 println("for-in循环语句:");
 int[] array = [0,1,2,3]; 
 for(int i in array) { 
 println(i); 
 } 
 println("for-in循环范围:");
 for(int i in 1..5) {
 println(i);
 }
 }
}

运行结果如下:

$ groovy hello.groovy
while循环语句:
0
1
2
3
4
for循环语句:
0
1
2
3
4
for-in循环语句:
0
1
2
3
for-in循环范围:
1
2
3
4
5

上面是常用的三种循环方式,其中一个比较特殊的地方是我们可以用..来定义一个数据范围,比如1:5表示1到5的数组。

另外我们还可以使用for-in来循环 Map,Map(字典)是我们在编写程序的过程中会镜像使用到的数据结构,大部分的编程语言都是使用{}来定义 Map,而在 Groovy 中有点不一样的地方,是使用[]来定义的 Map,如下所示:

class Example {
 static void main(String[] args) {
 // 定义一个Map
 def ageMap = ["Ken" : 21, "John" : 25, "Sally" : 22];
		
 for(am in ageMap) {
 println(am);
 }
 }
}

运行结果如下:

$ groovy hello.groovy
Ken=21
John=25
Sally=22

7.Groovy中的闭包
闭包就是一段代码块,可以命名可以被调用,使用和方法类似。
如下所示:
//1 定义一个闭包,闭包的定义就是这么简单
//  就是一段代码块,可以命名,可以被调用
def closer = {
    println "hello groovy"
}

//2 闭包的两种调用方式
//  建议使用第一种方式调用,这样不会和方法的调用混淆
closer.call()
closer()
//输出
hello groovy
hello groovy

除了上面这些最基本的特性外,Groovy 还支持很多其他的特性,比如:异常处理、面向对象设计、正则表达式、泛型、闭包等等。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法