语法规则
## 注释
**单行**注释使用 // 在该行的任==何位==置来识别。
**多行**注释标识与在开始 / * 和 * / 识别多行注释的末尾。
## 分号
像 Java 编程语言,它需要具有**分号**在 Groovy 定义多个语句之间进行区分。
## 关键字
### 除java之外的特殊数字类型定义,如:
BigInteger bi = 30g; //不可变的任意精度的有符号整数数字
println(bi);
BigDecimal bd = 3.5g; //不可变的任意精度的有符号十进制数
### 大小写敏感
## 运算符
### 范围运算符
def range = 0..5 //定义了一个简单的整数范围,存储到一个局部变量称为范围内的下限为0和上限为5,即range=[0,5]
println(range.get(2)) //打印出7,索引值为2
# 文件I/O
## 读取文件
//方法eachLine内置在Groovy中的File类中,File类用于实例化以文件名作为参数的新对象。
//然后它接受eachLine的函数,将它放到一个line的变量并相应地打印它。
new File("E:/Example.txt").eachLine {
line -> println "line : $line";
}
//文件类的text属性
File file = new File("E:/Example.txt")
### 写入文件
new File('E:/','Example.txt').withWriter('utf-8') {
writer -> writer.writeLine 'Hello World'
}
- 获取文件大小:`
.length()
` - 是否是文件:`
.isFile()
` - 是否是目录:`
.isDirectory()
` - 创建目录:
-
//如果目录E:\ Directory不存在,将创建它。 def file = new File('E:/Directory') file.mkdir()
-
- 删除文件:`
file.delete()
` - 复制文件:
// 将创建文件Example1.txt,并将文件Example.txt的所有内容复制到此文件。 def src = new File("E:/Example.txt") def dst = new File("E:/Example1.txt") dst << src.text
- 获取目录内容:
def rootFiles = new File("test").listRoots()
rootFiles.each {
file -> println file.absolutePath
}
- 列出特定目录中的文件
-
new File("E:/Temp").eachFile() { file->println file.getAbsolutePath() }
-
## Groovy的变量定义
可以不声明变量类型,此时为了不让代码库陷入无法维护的混乱,最好在应用程序中采用“鸭式输入”的理念。如:`def bfloat = 100.10
`;
`cDouble
`
### 包装类
Groovy 中的数字被定义为对象的原因通常是因为存在对数字执行操作的要求。在原始类型上提供类的概念被称为包装类。
Integer x = 5,y = 10,z = 0;
// The the values of 5,10 and 0 are boxed into Integer types
// The values of x and y are unboxed and the addition is performed
z = x+y;
println(z);
### 字符串
Groovy中的字符串可以用单引号('),双引号(“)或三引号(”“”)括起来。此外,由三重引号括起来的Groovy字符串可以跨越多行。
### 范围
- 1..10 - 包含范围的示例
- 1 .. <10 - 独占范围的示例
- 'a'..'x' - 范围也可以由字符组成
- 10..1 - 范围也可以按降序排列
- 'x'..'a' - 范围也可以由字符组成并按降序排列
### 日期和时间
`Date date = new Date(); //分配一个Date对象并初始化它,以便它表示分配的时间,以最近的毫秒为单位。
`
Date date = new Date(100); //分配一个Date对象并将其初始化以表示自
//标准基准时间(称为“该历元”,即1970年1月1日,00:00:00 GMT)起指定的毫秒数。
### 正则表达式
`~
`
### private
在任何编程语言中,总是使用private关键字隐藏实例成员,而是提供getter和setter方法来相应地设置和获取实例变量的值。
### Groovy 泛型
与在方法声明中使用的更熟悉的形式参数非常类似,类型参数提供了一种方法,可以为不同的输入重复使用相同的代码。区别在于形式参数的输入是值,而类型参数的输入是类型。
- 集合:
//显示了一般化ArrayList的示例。以下语句的作用是它只接受类型为string的列表项
List<String> list = new ArrayList<String>();
- 泛型类:
ListType<Integer> lstint = new ListType<>();
ListType<String> lststr = new ListType<>();
# Groovy特征
特征是语言的结构构造,允许 -
- 行为的组成。
- 接口的运行时实现。
- 与静态类型检查/编译的兼容性
- ==使用trait关键字定义:==
trait Marks { void DisplayMarks() { println("Display Marks"); } } //使用 implement 关键字以类似于接口的方式实现 trait。 class Student implements Marks { int StudentID int Marks1; }
- ==实现接口:使用 interface 关键字声明接口。==
-
interface Total { void DisplayTotal() } trait Marks implements Total { void DisplayMarks() { println("Display Marks"); }
-
- 定义属性
-
trait Marks implements Total {
int Marks1; //定义属性
void DisplayMarks() {
this.Marks1 = 10;
println(this.Marks1);
}
}
-
- 扩展特征
-
trait Marks {
void DisplayMarks() {
println("Marks1");
}
}trait Total extends Marks {
void DisplayMarks() {
println("Total");
}
}
-
## 闭包
- 一个方法甚至可以将代码块作为参数
- 闭包也可以包含形式参数
- 闭包也接受变量和参数。
class Example {
static void main(String[] args) {
def clos = {println "Hello World"};
clos.call();
}
}
# Groovy注释
在Groovy中,基本注释如下所示:
- ==@interface== - at符号字符(@向编译器指示以下是注释)
- 注释可以以没有主体的方法的形式和可选的默认值来定义成员。
## XML
可扩展标记语言XML是一种非常类似于HTML或SGML的标记语言。这是万维网联盟推荐的,可作为开放标准。XML对于跟踪少量到中等数据量而不需要基于SQL的骨干非常有用。
import groovy.xml.MarkupBuilder
class Example {
static void main(String[] args) {
def mB = new MarkupBuilder()
### JMX
import java.lang.management.*
def os = ManagementFactory.operatingSystemMXBean
### Json
使用JsonSlurper解析数据
def slurper = new JsonSlurper()
### DSLS
DSL或域特定语言旨在简化以Groovy编写的代码,使得它对于普通用户变得容易理解。以下示例显示了具有域特定语言的确切含义。
### 数据库
Groovy的groovy-sql模块提供了比当前Java的JDBC技术更高级的抽象。Groovy sql API支持各种各样的数据库,其中一些如下所示。
HSQLDB Oracle SQL Server MySQL MongoDB
可以对以上数据库进行增删改查等操作。
## 构建器
### Swing构建器:
在groovy中,还可以使用groovy中提供的<u>swing构建器创建图形用户界面</u>。开发swing组件的主要类是SwingBuilder类。这个类有许多方法创建图形组件,如 -
- JFrame - 这是用于创建框架元素。
- JTextField - 这用于创建textfield组件。
让我们看一个简单的例子,如何使用**SwingBuilder**类创建一个Swing应用程序。在以下示例中,您可以看到以下几点 -
您需要导入**groovy.swing.SwingBuilder和javax.swing.***类。
在Swing应用程序中显示的所有组件都是SwingBuilder类的一部分。
对于框架本身,您可以指定框架的初始位置和大小。您还可以指定框架的标题。
您需要将Visibility属性设置为true才能显示框架。
### DOM生成器
DOM构建器可用于解析HTML,XHTML和XML,并将其转换为W3C DOM树。
def rd = new StringReader(records)
def doc = groovy.xml.DOMBuilder.parse(rd)
### JsonBuilder
JsonBuilder用于创建json类型的对象。
def builder = new groovy.json.JsonBuilder()
### NodeBuilder
// NodeBuilder用于创建Node对象的嵌套树以处理任意数据。下面显示了Nodebuilder的用法示例。
def nodeBuilder = new NodeBuilder()
### FileTreeBuilder
FileTreeBuilder是一个从规范**生成文件目录结构**的构建器。
# Groovy 单元测试
JUnit是一个开源测试框架,是Java代码自动化**单元测试**的公认行业标准。幸运的是,JUnit框架可以很容易地用于测试Groovy类。所需要的只是扩展作为标准Groovy环境一部分的GroovyTestCase类。 Groovy测试用例类基于Junit测试用例。
**Groovy测试套件**
## Groovy 模板引擎
- 字符串中的简单模板:$符号来定义可以插入值的参数或模板
- SimpleTemplateEngine
- StreamingTemplateEngine
- XMLTemplateEngine
## Groovy Shebang行
标签:Groovy,知识点,简要,###,File,println,new,def From: https://blog.csdn.net/qq_42935045/article/details/143308936除了单行注释外, 还有一种被特别的行注释, 通常被称作shebang行,它通常在UNIX系统中被认知,它容许脚本直接在命令行中运行那些你已经安装的Groovy和那些已经在PATH中可用的groovy命令。
#!/usr/bin/env groovy
println "Hello from the shebang line"