1、 简介

Groovy 是一种运行在 Java 虚拟机(JVM)上的动态语言,它以其简洁的语法和强大的功能而受到开发者的青睐。作为一种能够与 Java 无缝交互的语言,Groovy 继承了 Java 的许多优点,并且在某些方面进行了扩展和改进,使得开发者能够更加高效地编写代码。
以下是对Groovy特点的优化概述:

  1. 简洁性:Groovy 的设计哲学之一是减少模板化的代码和重复的模式,使得代码更加简洁。与 Java 相比,完成相同功能的 Groovy 代码通常更短,这使得代码更容易编写和维护。

  2. 动态类型:Groovy 支持动态类型,这意味着开发者无需显式声明变量类型。这种灵活性使得代码更加简洁,并且能够在编写代码时提供更快的反馈。

  3. 闭包和元编程:Groovy 引入了闭包和元编程的概念,这些特性使得代码更加灵活和强大。闭包允许开发者编写可重用的代码块,而元编程则允许在运行时动态地创建和修改类和方法。

  4. 函数式编程支持:Groovy 支持函数式编程范式,开发者可以编写更加简洁和表达性强的代码。在 Groovy 中,不需要显式的 main 函数,这使得编写脚本和快速原型开发变得更加容易。

  5. 默认导入包:Groovy 默认导入了许多常用的 Java 包,这减少了开发者在编写代码时需要导入的包的数量,进一步简化了代码编写过程。

  6. 公共作用域:在 Groovy 中,所有的类成员默认是公开的(public),这简化了访问控制的声明,同时也鼓励开发者采用更加开放的设计模式。

  7. 对象化基本类型:Groovy 将基本类型视为对象,这意味着可以直接在基本类型上调用方法。这种特性使得代码更加一致,并且能够利用对象的特性。

  8. DSL 支持:Groovy 支持领域特定语言(DSL),这使得开发者能够创建和使用专门针对特定问题的简洁、易读的语法。DSL 可以显著提高代码的可读性和可维护性。

Groovy 是基于 Java 语言的,所以完全兼容 Java 语法,所以对于 java 程序员学习成本较低。

详细了解请参考: https://www.groovy-lang.org/documentation.html

image-20240405110715943

2、安装[非必须]

下载地址: https://groovy.apache.org/download.html

image-20240405111010391

我这里就直接下载整个 4.0.20 版本的了。

然后我们直接找个地方解压,并配置相关的环境变量就好了。

image-20240405111420525

image-20240405111602049

然后就可以使用 CMD 查询是否配置成功了。

image-20240405111722872

3、创建项目

image-20240405112416996

image-20240405112703430

4、基本语法

image-20240405135029407

在Groovy中,类型转换是一个非常自然和灵活的过程,它允许不同类型的数据在需要时自动转换。这种特性极大地简化了代码的编写和维护,因为它减少了显式类型转换的需求。以下是对Groovy中类型转换和类处理的详细说明:

类型转换

Groovy支持多种类型之间的自动转换,这包括:

  1. 字符串与基本类型之间的转换:Groovy允许将字符串转换为基本类型(如int、double等),反之亦然。例如,字符串"123"可以通过调用.toInteger()方法转换为整数。

  2. 基本类型与其包装类之间的转换:Groovy中的基本类型和它们的包装类(如Integer对应int)之间可以无缝转换。这意味着你可以在需要对象的地方使用基本类型,而在需要基本类型的地方使用包装类对象。

这种自动类型转换的特性使得Groovy在处理不同类型的数据时更加灵活和方便。开发者不需要编写额外的代码来进行显式的类型转换,从而可以专注于业务逻辑的实现。

类说明

在Groovy中,如果你创建了一个没有类定义的脚本文件,这个文件将被当作一个脚本(script)来处理。Groovy会自动将这个脚本转换为一个名为Script的类的实例,这个类的名字通常由文件名决定(去掉扩展名.goovy)。

在这个自动生成的Script类中,Groovy会创建一个run方法,这个方法包含了脚本的所有内容。这样,当你运行这个脚本时,实际上就是在调用这个run方法。

此外,为了便于外部执行,Groovy还会在这个自动生成的类中添加一个main方法。这个main方法会调用run方法,使得脚本可以在命令行或其他环境中作为程序执行。

这种将脚本转换为类的做法,使得Groovy脚本既可以作为独立的脚本运行,也可以作为类的一部分被导入和重用。这增加了Groovy的灵活性,并为开发者提供了更多的选择来组织和使用他们的代码。

4.1 案例 1: 创建

image-20240405165319390

4.2 案例 2:基本注意点

image-20240405171443349

提示:方法调用时,在不含有歧义的地方可以省略方法调用时的括号。这类似于使用${变量名}时,括号在不引起歧义的地方可以省略是一样的:如

image-20240405171602195

4.3 案例3:引号说明

image-20240405171747865

4.4 案例 4:三个语句结构

Groovy 支持顺序结构从上向下依次解析、分支结构(if…else、if…else if …else…、switch…case、for、while、do…while)

具体参考官网:http://www.groovy-lang.org/semantics.html#_conditional_structures

image-20240405171905649

4.5 案例 5:类型及权限修饰符

Groovy 中的类型有:

1.原生数据类型及包装类

Primitive typeWrapper class
booleanBoolean
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble

2.类、内部类、抽象类、接口

3.注解

4.Trait: 可以看成是带有方法实现的接口

权限修饰符: public、protected、private

Groovy 类与 Java 类在设计和使用上有一些显著的区别,这些区别使得Groovy在某些方面更加灵活和简洁。以下是Groovy类与Java类之间的主要区别的进一步阐释:

  1. 可见性修饰符:在Java中,你需要使用publicprotectedprivatedefault关键字来指定类或方法的可见性。而在Groovy中,如果没有明确指定可见性修饰符,类或方法默认是公共的(public)。这减少了模板化的代码,使得代码更加简洁。对于包级别的私有可见性,可以通过@PackageScope注解来实现。

  2. 属性和getter/setter:在Java中,你需要为类中的每个字段显式编写getter和setter方法,除非你使用了自动getter和setter的语法(Java 11及以上版本)。而在Groovy中,如果没有为字段指定可见性修饰符,字段将自动转换为属性,并且Groovy会自动生成相应的getter和setter方法。这进一步简化了代码,使得开发者可以专注于业务逻辑的实现。

  3. final属性:在Groovy中,如果你声明了一个属性为final,Groovy不会为这个属性生成setter方法。这是因为final关键字表示该属性的值一旦被赋值后就不可更改,因此不需要setter方法。这与Java的行为是一致的,但在Groovy中,你不需要显式编写setter方法。

  4. 源文件与类的关系:在Java中,每个源文件通常只包含一个公共类,并且源文件的名称必须与公共类的名称相匹配。而在Groovy中,一个源文件可以包含一个或多个类,但如果源文件中没有类定义的代码,则将其视为脚本。脚本是一种特殊的类,它们的名称与源文件名相同,并且脚本中定义的所有代码都被包含在run方法中。如果你在脚本文件中定义了与文件名相同的类,那么这个类将被视为脚本的扩展,并且可以通过Script类来访问。

这些区别使得Groovy在编写脚本和快速原型开发时更加高效和方便。Groovy的这些特性不仅简化了代码,还提高了开发效率,使得开发者可以更加专注于业务逻辑的实现,而不是被繁琐的语法和模板化代码所困扰。

提 示 : 有 关 Groovy 中 各 种 各 样 的 数 据 类 型 和 权 限 修 饰 符 及 Goovy 与 Java 区 别 请 参 考 :

http://www.groovy-lang.org/objectorientation.html#_modifiers_on_a_property

4.6 案例 6:集合操作

操作ListMap
添加元素add()put()
添加集合plus()
删除指定下标元素remove()
删除指定元素removeElement()remove()
移除集合中的元素removeAll()
弹出最后一个元素pop()
修改指定下标元素putAt()
遍历each()each()
获取元素个数size()
判断是否包含值contains()
集合加减操作不支持+、-

请参考官网:http://www.groovy-lang.org/syntax.html#_number_type_suffixes

提示:可以把不同的基本类型添加到同一集合中。

4.7 案例 7:类导入

image-20240405173616914

Groovy 语言默认提供的导入

import java.lang.*
import java.util.*
import java.io.*
import java.net.*
import groovy.lang.*
import groovy.util.*
import java.math.BigInteger
import java.math.BigDecimal

这样做是因为这些包中的类最常用。通过导入这些样板代码减少了。

参考官网地址:http://www.groovy-lang.org/structure.html#_imports

4.8 案例 8:异常处理

Groovy 中的异常处理和 java 中的异常处理是一样的。

image-20240405174329505

参考官网地址: http://www.groovy-lang.org/semantics.html#_try_catch_finally

4.9 案例 9:闭包

闭包是Groovy语言中一个非常强大和灵活的特性,它允许开发者以一种简洁和表达性强的方式来编写代码。闭包的概念源自函数式编程,它提供了一种定义代码块的方式,这个代码块可以被赋值给变量、作为参数传递给方法或者在类中定义为成员。

闭包的特性

  1. 开放和匿名:闭包不需要显式的类型声明或名称,它可以在任何地方被定义,并且可以被赋值给变量或者作为参数传递。这种开放和匿名的特性使得闭包非常灵活和方便。

  2. 接受参数和返回值:闭包可以定义自己的参数,就像方法一样。同时,闭包也可以有返回值。这使得闭包可以执行复杂的操作,并且可以返回结果。

  3. 引用外部变量:闭包可以捕获并使用其定义时所在的作用域中的变量。这意味着闭包可以访问定义它的上下文中的局部变量,甚至是在闭包被调用时那些变量可能已经不存在了。

闭包的语法

闭包的基本语法如下:

{ [closureParameters -> ] statements }
  • closureParameters:这是闭包的参数列表,它是一个逗号分隔的列表,可以包含类型化的或非类型化的参数。如果闭包不接受参数,这部分可以省略。
  • ->:这个箭头字符用来分隔参数列表和闭包体。
  • statements:这是闭包的主体,包含了一系列的Groovy语句,这些语句定义了闭包要执行的操作。

闭包的使用

闭包可以在多种场合使用,例如:

  • 作为变量的值:

    // 定义一个闭包myClosure,它接收一个参数it,返回参数的两倍
    def myClosure = { it * 2 }
    
    // 使用闭包myClosure,传入参数5,检查结果是否等于10
    def result = myClosure(5) == 10
    
    // 打印结果
    println(result)
    
  • 作为方法的参数:

    /**
     * 遍历一个数字列表并打印每个数字。
     *
     * @param numbers 一个包含整数的列表。
     *
     * 本示例中没有返回值,因为它只是简单地遍历并打印列表中的每个元素。
     */
    def numbers = [1, 2, 3, 4, 5]
    // 使用each方法遍历numbers列表,对每个元素执行.println操作进行打印
    numbers.each { println it }
    
  • 在类中定义为成员:

    class MyMath {
        /**
         * 将输入参数乘以二。
         *
         * @param it 输入的数字。
         * @return 输入数字的两倍。
         */
        def multiplyByTwo = { it * 2 }
    }
    
    // 创建一个 MyMath 的实例
    def math = new MyMath()
    
    // 验证 multiplyByTwo 方法是否正确工作
    assert math.multiplyByTwo(5) == 10
    
    

闭包的强大之处在于它的简洁性和灵活性,它使得代码更加紧凑,同时提供了丰富的表达能力。在Groovy中,闭包是实现高阶函数、事件处理和异步编程等高级功能的关键工具。

参考:http://www.groovy-lang.org/closures.html

5、在 idea 中创建普通 java 工程

image-20240405180144108

如果你的idea 在创建 项目的时候没有 Advanced Settomgs 来指定本地的GradleL。那就参考下面去指定本地安装的Gradle。

image-20240405181008116

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐