问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Groovy基础入门

创作时间:
作者:
@小白创作中心

Groovy基础入门

引用
CSDN
1.
https://blog.csdn.net/zhangyifang_009/article/details/137093388

Groovy是一种运行在JVM上的动态语言,它结合了Python、Ruby和Smalltalk的特性,同时保持了与Java的无缝集成。本文将带你从零开始学习Groovy,包括环境配置、基础语法以及如何在Java项目中使用Groovy。

一、Groovy简介

Groovy是运行在JVM中的一种动态语言,可以在Java平台上进行编程,使用方式基本与使用Java代码的方式相同,它的语法与Java语言的语法很相似,与Java相比,Groovy更加灵活、简洁,而且完成同样的功能基本上所需要的Groovy代码量会比Java的代码量少,它还增加了很多功能,如:函数式编程、运行时的灵活性以及许多元编程内容。它可以用来构建一个完整的工程,或者作为一个Module,第三方集成到Java代码中。甚至可以作为脚本在执行时动态编译。

官网:https://groovy-lang.org/index.html

二、Groovy的Hello World程序

1. 下载安装groovy环境

到官网下载groovy的sdk,我这里下载的是4.0.20版本,解压到指定的文件夹

配置groovy到系统环境变量中:

GROOVY_HOME:D:\SoftWare\dev\groovy-4.0.20

PATH: %GROOVY_HOME%\bin

设置好环境变量,打开命令行执行命令:groovy -v或者groovy -version命令,看到版本号,则说明环境配置好了

2.创建HelloWord项目

idea创建demo项目,创建时选择语言为Groovy,SDK为刚才安装的目录

新建一个类:HelloGroovy.groovy文件,并编写main方法,执行程序,可以看到控制台的输出结果

三、Groovy基础语法

简单的打印语句

可以直接使用println来打印语句


println "Hello, Groovy!"  

def 定义无类型的变量

我们无需显式地声明变量的类型,Groovy 会根据赋给变量的值自动推断其类型


def name = "Even"  
def age = 20  
println "Name: $name, Even: $age"  

字符串操作

Groovy的字符串支持模板化,可以使用${}来插入变量值:


def greeting = "Hello"  
def person = "Bob"  
println "${greeting}, ${person}!"  

值与引用比较

Groovy中的

对应于Java中使用 equals() 方法

Groovy中的 is 对应于Java中使用 == 进行对象引用比较


```java
String name1  =   "Alice"
String name2  =   new  String( "Alice" )
if  (name1   ==  name2) {//  Java中写为 name1.equals(name2)
    System.out.println( " equal " );
}  else  {
    System.out.println( " not equal " );
}
if  (name1.is(name2)) {//  Java中写为 name1  == name2
    System.out.println( " identical " );
}  else  {
    System.out.println( " not identical " );
}
// 对应输出结果为:
equal 
not identical  

数组和循环

Groovy使用[]来创建列表,并支持使用for-in循环遍历数组元素:


def fruits = ["apple", "banana", "cherry"]  
for (fruit in fruits) {  
    println fruit  
}
  

方法定义和调用


def greet(name) {  
    println "Hello, $name!"  
}  
  
greet("Groovy")
  

在Groovy的方法中return是可选的


public  String sayHello() {
   return   " Hello, Groovy "
}
// 或者
public  String sayHello() {
   " Hello, Groovy "
}
  

Groovy 中的方法参数可以具有默认值


// 定义一个带有默认参数的方法
def greet(name = "World") {
    println "Hello, $name!"
}
// 调用方法,不提供参数
greet()
// 调用方法,提供参数
greet("Alice")
  

注释

Groovy中的注释比Java多了首行注释#!,其他与Java相同比如单行注释:// 多行注释:// 或者是 支持javadoc的/ */


#! 首行 注释
/*
 * 多行注释
  */
/**
 * javadoc 注释
  */
//  单行注释
  

闭包(lambda表达式)

Groovy支持闭包,在 Groovy 中,闭包是一种特殊的对象,它可以被存储在变量中、作为参数传递给方法或者赋值给其他变量。闭包可以捕获其定义时的上下文环境,包括外部变量和方法的引用。我们可以把它看做是一个匿名的函数,可以接收参数,并可以有返回值,通常使用花括号
{}
来定义


// 定义一个简单的闭包
def sayHello = { name ->
    println "Hello, $name!"
}
// 调用闭包
sayHello("Alice")
sayHello("Bob")
  

默认导包

Groovy默认导入了一些常用的包,我们无需显式导入它们


以下的包均为默认导入的包
groovy.lang.*
groovy.util.*
java.lang.*
java.util.*
java.io.*
java.net.*
java.math.BigDecimal
java.math.BigInteger
  

四、Java集成Groovy

在Java中使用Groovy有三种方式:通过GroovyShell执行Groovy脚本;通过GroovyClassLoader动态加载Groovy Class文件;通过GroovyScriptEngine脚本引擎加载Groovy脚本。

1. 使用GroovyShell执行Groovy脚本

1)引入依赖


<!-- https://mvnrepository.com/artifact/org.apache.groovy/groovy -->
<dependency>
    <groupId>org.apache.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>4.0.20</version>
</dependency>
  

2)定义脚本内容并执行


import groovy.lang.Binding;
import groovy.lang.GroovyShell;
public class GroovyShellExample {
    public static void main(String[] args) {
        // 创建一个Binding对象,用于绑定变量
        Binding binding = new Binding();
        binding.setVariable("name", "Groovy");
        // 创建GroovyShell实例
        GroovyShell shell = new GroovyShell(binding);
        // 执行Groovy脚本
        Object result = shell.evaluate("println('Hello, ' + name + '!'); return name.length();");
        // 输出结果
        System.out.println("Script result: " + result);
    }
}
  

在调用含有入参的脚本的时候,参数的传递是通过Binding来完成的。

2.GroovyClassLoader动态加载Groovy Class文件

Groovy类(GroovyClass.groovy):


class GroovyClass {  
    String greet(String name) {  
        return "Hello, " + name + "!"  
    }  
}
  

调用示例


import groovy.lang.GroovyClassLoader;  
import groovy.lang.GroovyObject;  
  
public class GroovyMethodCallExample {  
    public static void main(String[] args) throws Exception {  
        // 创建GroovyClassLoader实例  
        GroovyClassLoader loader = new GroovyClassLoader();  
  
        // 加载Groovy类  
        Class<?> groovyClass = loader.parseClass(new File("GroovyClass.groovy"));  
  
        // 创建Groovy类的实例  
        GroovyObject groovyObject = (GroovyObject) groovyClass.getDeclaredConstructor().newInstance();  
  
        // 调用Groovy方法  
        String greeting = (String) groovyObject.invokeMethod("greet", "World");  
  
        // 输出结果  
        System.out.println(greeting);  
    }  
}
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号