欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Groovy基本使用(2):基本语法

程序员文章站 2022-07-12 15:11:03
...

Groovy 基本语法

Groovy 是一种动态类型的 JVM 敏捷开发语言,基本的语法和 Java 十分相似,很多关键字直接使用 Java 的关键字,如:import 导入类,//、/**/ 标记注释,使用和 Java 类似运算符 等等;

一个基本的示例

Helloworld.groovy
 
class HelloWorld {
    static void main(String[] args){
        println('Hello world ,Welcome to Groovy!');
    }
}

当然 groovy 可以直接以脚本的形式编写,如下:

test.groovy
def name = 'assad';
println "Hello ${name}";
println 'Welcome to groovy';
运行时候直接在控制台定位到 test.groovy 目录下,以如下方式启动 groovy 脚本
groovy test.groovy

导入类

groovy 使用 import 关键字导入类,其默认预先导入的类如下:
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

数据类型

Groovy 内置以下的数据类型:
byte、short 、int、long、float、double、char、Boolean、String 
分别对应 Java 中的数据类型,同时还支持 Java 的基本类型的包装类型,以及高精度计算类型 java.math.BigInteger,java.math.BigDecimal; 

变量

Groovy 中声明变量的方式有2种,使用显式声明变量类型,或者使用 def 关键字声明动态类型;
String str = 'are you ok';
int num = 12;
def str2 = 'are you ok?';
def num2 = 14;

println("str="+str+"num="+num+"str2="+str2+"num2="+num2);

运算符

Groovy 对以下运算符的支持同 Java :
  • 算术运算符:+  -  *  /  %  ++  --
  • 关系运算符:==  >=  <=  >  <  
  • 逻辑运算符:&&  ||  ! 
  • 位运算符:&  |  ^  ~  
  • 赋值运算符:+=  -=  *=  /=  (%)=  

同时 Groovy 还支持范围运算符
范围是指定值序列的速记,范围由序列中的第一个和最后一个值表示,Range可以是包含或排除。包含范围包括从第一个到最后一个的所有值,而独占范围包括除最后一个之外的所有值,可以把范围对象看成一个有序元素主程的列表:
1..10 - 包含范围的示例
1 .. <10 - 独占范围的示例
'a'..'x' - 范围也可以由字符组成
10..1 - 范围也可以按降序排列
'x'..'a' - 范围也可以由字符组成并按降序排列。
这些范围运算符主要用在定义一个有序序列(可以用在循环控制等地方),如下示例:
String str = 'are you ok';
int num = 12;
def str2 = 'are you ok?';
def num2 = 14;

println("str="+str+"num="+num+"str2="+str2+"num2="+num2);

这些范围运算符产生的对象支持以下方法:
contains() 检查范围是否包含特定值
get() 返回此范围中指定位置处的元素
getFrom() 获得此范围的下限值
getTo() 获得此范围的上限值
isReverse() 判断该范围是否是一个反向的范围
size() 返回此范围的元素数
subList() 返回此指定的fromIndex(包括)和toIndex(排除)之间的此范围部分的视图

控制流
Groovy 的判断语句语法 if,if else,switch ,循环语句 while,for,for-in,循环控制语句 break,continue 语法同 Java 中的一致;
其中 for-in 可以搭配范围类型使用,代替列表循环传统的for结构;

列表 List

Groovy 中,List保存了一系列对象的引用,类似 Java,使用整数作为索引;
使用 [ ] 来表示列表,有以下这些表示:
[11,12,13,14] - 整数值列表
['Angular','Groovy','Java'] - 字符串列表
[1,2,[3,4],5] - 嵌套列表
['Groovy',21,2.11] - 异构的对象引用列表
[] - 一个空列表
基本的使用如下:
def list = [1,2,3,4,5];
println(list);    //output:[1, 2, 3, 4, 5]
println(list.get(1));
list.add(6);
list.set(3,7)
列表对象支持的方法如下:
add() 将新值附加到此列表的末尾
get() 返回此列表中指定位置的元素
set() 设置列表中指定位置的元素值
contains() 如果此列表包含指定的值,则返回true
isEmpty() 如果此列表不包含元素,则返回true
remove() 删除此列表中指定位置的元素
pop() 从此列表中删除最后一个项目
reverse() 创建与原始列表的元素相反的新列表
size() 获取此列表中的元素数
sort() 返回原始列表的排序副本(升序)

映射 Map

映射(关联数组)是对象引用的无序集合。Map集合中的元素由键值访问。 Map中使用的键可以是任何类,同样使用 [ ] 表示映射,一些表示如下:
['TopicName':'Lists','TopicName':'Maps'] - 具有TopicName作为键的键值对的集合及其相应的值。
[:] - 空映射
支持的常用方法如下:
containsKey() 判断此Map是否包含指定key
get() 查找此Map中的 key 并返回相应的 value。如果此映射中没有键的条目,则返回null
keySet() 获取此Map中的所有Key组成的Set
put() 将指定的 Value 与此 Map 中的指定 Key 相关联。如果此映射先前包含此键的映射,则旧值将替换为指定的值
size() 返回此Map 中的 key-value 映射的数量
values() 获取此Map中的所有 value 组成的Set

字符串

Groovy 对于字符串的引用,可以使用 "string",'string',"""string""" 这3中方式;
“”和 ' ' 的区别类似于 PHP,' ' 用于引用纯字面量的字符串," " 除了可以引用纯字面量的的字符串外,还可以引用模板引擎,一个简单的示例如下:
def str1 = "Hello!";
def str2 = "${str1} welcome to groovy!" ;
println(str1);    //output: Hello!
println(str2);    //output: Hello! welcome to groovy!
""" 可以用于引用跨行的字面量:
def str = """are you ok,
             my friend ?
             welcome to groovy!""";
Groovy 对于字符串变量可以才采用类似C++的方式,进行字符串索引,同时对于索引值支持 range 范围类型,如下:
def str1 = "Are you ok?";
def ch = str1[0];    //ch = "A";
def ch2 = str1[2];   //ch2 = "e";
def subStr = str1[0..2]; //subStr = "Are"
Groovy 字符串的方法基本类似于Java String类的方法;
Groovy 字符串提供了 ==~ 运算符用于正则表达式的匹配,示例的用法如下:
def regix = '.*oo.*';       //正则表达式字符串
def str = 'groovy'          //待匹配的字符串
Boolean result = str ==~ regix;    //result = true;

方法

Groovy 的方法声明和调用基本类似于 Java,不过 Groovy 方法返回类型可以设置为 def,参数类型可以不用声明,修饰符不声明默认为public ;
int sum(int num1,int num2 ){    //groovy完全支持Java一样的方法声明
    return num1 + num2;
}
def sum(num1,num2){       //动态类型的声明
    return num1 + num2;
}
groovy 方法还支持默认参数
def sum(num1 = 1,num2 = 2){      
    return num1 + num2;
}

static main(String[] args){
    println(sum(4,4));  //output: 8
    println(sum());    //output: 3
}

对象

groovy 对于对象的语法同 Java 基本一致,同样使用 class 关键字标记类,使用 interface 标记接口,使用 implements 标记继承接口,使用 extends 标记继承类,使用 abstract 标记抽象类;
不过有一点不同,groovy 默认的修饰符为 public 即全公开,非 Java 的包内公开;
groovy 对于泛型支持的语法也和 Java 中的一样;

异常处理

groovy 支持和 Java 一样的异常处理语法:try,catch,finally,支持 Java 中的 Throwable 异常类;