Groovy基础入门

news2024/9/23 9:33:52

一、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);  
    }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异

引言 随着互联网的快速发展&#xff0c;信息的获取变得比以往任何时候都更加便捷。在数字化时代&#xff0c;人们对于获取准确、及时信息的需求愈发迫切。传统搜索引擎通过关键词匹配的方式为用户提供了大量的信息&#xff0c;然而&#xff0c;这种机械式的检索方式有时候并不…

SpringMVC第一个helloword项目

文章目录 前言一、SpringMVC是什么&#xff1f;二、使用步骤1.引入库2.创建控制层3.创建springmvc.xml4.配置web.xml文件5.编写视图页面 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; SpringMVC 提示&#xff1a;以下是本篇文章正文内容&#xf…

Linux(CentOS)安装Redis教程_简单快捷

一、安装依赖 因为redis是用C语言开发的&#xff0c;所以在安装之前需要确定是否安装gcc环境&#xff08;gcc -v&#xff09;&#xff0c;如果没有安转可以执行一下命令进行安装 [rootlocalhost ~]# yum install -y gcc 二、下载安装包 1.在官网先进行下载 官网地址&#x…

linux 内存介绍

大致共有四类&#xff1a;VSS、RSS、PSS、USS &#xff0c;通常情况下&#xff0c;VSS > RSS > PSS > USS 1.VSS(Virtual Set Size)虚拟耗用内存&#xff08;包含共享库占用的内存&#xff09; VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已…

网络:udptcp套接字

目录 协议 网络传输基本流程 网络编程套接字 udp套接字编程 udp相关代码实现 sock函数 bind函数 recvfrom函数 sendto函数 udp执行指令代码 popen函数 udp多线程版收发消息 tcp套接字编程 tcp套接字代码 listen函数 accept函数 read/write函数 connect函数 recv/…

Gitlab CI---could not read username for xxx: no such device or address

0 Preface/Foreword 项目开发中&#xff0c;经常会使用第三方的算法或者功能&#xff0c;那么就需要把对应的repo以子模块的方式添加到当前repo中。 添加命令&#xff1a; git submodule add <URL> 1 问题表现 子模块添加成功&#xff0c;但是GitLab CI阶段&#xff…

如何在Apache Arrow中定位与解决问题

如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更&#xff0c;出现了一个 crash问题&#xff0c;底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题&#xff0c;在这篇文章中以实际工作中resize导致crash为例&#xff0c;引出如何…

ChatGLM3:AttributeError_ can‘t set attribute ‘eos_token‘

最近在微调 ChatGLM3-6b 时&#xff0c;训练好模型之后&#xff0c;调用inference_hf.py函数验证模型的时候报了如下错误&#xff0c;下面是解决方案。 我在训练时使用的是ptuning_v2.yaml配置文件&#xff0c;训练运行代码如下&#xff1a; CUDA_VISIBLE_DEVICES1 python fi…

llama-index 结合chatglm3-6B 利用RAG 基于文档智能问答

简介 llamaindex结合chatglm3使用 import os import torch from llama_index.core import VectorStoreIndex, ServiceContext from llama_index.core.callbacks import CallbackManager from llama_index.core.llms.callbacks import llm_completion_callback from llama_ind…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

软件工程学习笔记12——运行维护篇

运行维护篇 一、版本发布1、关于软件版本2、版本发布前&#xff0c;做好版本发布的规划3、规范好发布流程&#xff0c;保障发布质量 二、DevOps工程师1、什么是 DevOps 三、线上故障1、遇到线上故障&#xff0c;新手和高手的差距在哪里2、大厂都是怎么处理线上故障的 四、日志管…

探索 2024 年 Web 开发最佳前端框架

前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂&#xff0c;交互和动画功能越来越多&#xff0c;这是开发前端框架的初衷之一。 在网络的早期&#xff0c;网页相当简单。它们主要以静态 HTML 为特色&a…

插入排序、归并排序、堆排序和快速排序的稳定性分析

插入排序、归并排序、堆排序和快速排序的稳定性分析 一、插入排序的稳定性二、归并排序的稳定性三、堆排序的稳定性四、快速排序的稳定性总结在计算机科学中,排序是将一组数据按照特定顺序进行排列的过程。排序算法的效率和稳定性是评价其优劣的两个重要指标。稳定性指的是在排…

【NLP笔记】大模型prompt推理(提问)技巧

文章目录 prompt概述推理&#xff08;提问&#xff09;技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接&#xff1a; Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测&#xff1a;NL…

植物大战僵尸Javascript版web游戏源码

源码介绍 植物大战僵尸Javascript版web游戏源码&#xff0c;非常强大&#xff0c;1比1还原电脑版植物大战僵尸游戏&#xff0c;带背景音乐&#xff0c;玩法和原版一模一样。 源码截图 下载地址 https://download.csdn.net/download/huayula/89048275

UE RPC 外网联机(2)

外网联机配置测试 一、网络配置 开放外网端口开放端口是为了可以进行外网访问;端口包含一个预案管理服务器端口和多个预案服务器端口;(预案管理服务器类似于大厅,预案服务器类似于房间,大厅管理多个房间;) (1)预案管理服务器端口;(如:23001) (2)预案服务器端口…

UDP send 出现大量“Resource temporarily unavailable”

背景 最近排查用户现场环境&#xff0c;查看日志出现大量的“send: Resource temporarily unavailable”错误&#xff0c;UDP设置NO_BLOCK模式&#xff0c;send又发生在进程上下文&#xff0c;并且还设置了SO_SNDBUF 为8M&#xff0c;在此情况下为什么还会出现发送队列满的情况…

利用R语言和curl库实现网页爬虫的技术要点解析

R语言简介 R语言是一种自由、跨平台的编程语言和软件环境&#xff0c;专门用于统计计算和数据可视化。它具有丰富的数据处理、统计分析和图形展示功能&#xff0c;被广泛应用于数据科学、机器学习、统计建模等领域。 R语言技术优势 丰富的数据处理功能&#xff1a; R语言拥有…

echarts 3D示例 echart, echarts-gl

echarts官网有很多的炫酷的3D模型 来尝试实现下&#xff0c;使用原本的柱状图或者折线图代码创建echarts示例,使用cdn的方式引入echarts <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewp…

windows10搭建reactnative,运行android全过程

环境描述 win10,react-native-cli是0.73&#xff0c;nodeJS是20&#xff0c;jdk17。这都是完全根据官网文档配置的。react-native环境搭建windows。当然官网文档会更新&#xff0c;得完全按照配置来安装&#xff0c;避免遇到环境不兼容情况。 安装nodeJS并配置 这里文档有详…