Groovy基础知识一

一、概述
构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持

二、学习环境
没有特意去官网下载必要的组件。基于android studio并且使用idea来使用非常简便。

三、一些特点

  • 基于java,借鉴Python,Ruby,Smalltalk等语言特征,语法简洁。所以有前几门语言基础的很容易入门;
  • 可以不以;(分号)作为结束符号了;
  • 声明变量不需要指定数据类型,它会自动识别;
  • 使用闭包,简化代码;
  • 特征,可以有具体实现的接口。
  • 元对象编程

四、基本数据类型

  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • Boolean (跟java形式上有点区别,这个是大写开头;java是小写的)
  • String (这个不能说基本数据类型了,但是使用非常的频繁,也把它列在这里了)

groovy的基本数据类型基本与java没什么区别了,都具有将其他一个基本数据类型转换成自己的数据类型的方法(前提是可以互相装换)。相应的也都有数据包装类(包装类可以参考java的包装类)
五、变量

  • groovy变量声明一般为:数据类型+变量名称;也可以使用def关键字来声明:def+ 变量名称,不需要声明数据类型
  • 变量名称有字母,下划线,数字组成,并且只能以字母,下划线开头;

六、运算符
groovy的运算符与java的运算符大同小异。关系逻辑运算符,位运算符,赋值运算符与java没有区别。groovy新增了一个范围运算符Range ,用上限范与下限范围使用…间隔。如:

 def r = 0..5 //表示从0到5的范围

Range也有索引,从0开始。使用get(int index)获取索引值对用的值。getFrom()获取下限值,getTo()获取上限值。
七、循环

  • 普通for循环
  • while循环
  • for in循环

for in 循环语句语法:

    for(variable in range) { 
       statement #1
       statement #2 
       ...
    }

for in 循环类似java的增强for循环,in 后面可以接数组,集合,map的可以迭代的数据;当然也可以接groovy特有的范围。
跳出循环的关键字有break,continue,return。
八、条件语句

  • if else
  • if else 嵌套
  • switch
  • switch 嵌套

九、方法

  • 使用返回值类型或使用def关键字定义。方法可以接收任意数量的参数。
  • 定义参数时,不必显式定义类型
  • 可以添加修饰符,如public,private和protected。默认情况下,如果未提供可见性修饰符,则该方法为public。
  • Groovy可以指定方法中的参数的默认值。 如果没有值传递给参数的方法,则使用缺省值。 如果使用非默认和默认参数,则必须注意,默认参数应在参数列表的末尾定义。
  • 方法也具有作用域

十、文件 IO
groovy的IO操作对比Java来讲,简直太简洁,提供了许多辅助方法。
读取文件:

new File("文件路径").eachLine {  
         line -> println "line : $line"; 
      } 

方法eachLine内置在Groovy中的File类中,目的是确保文本文件的每一行都被读取到。
如果整个文件内容都是作为字符串来读取,那么有一种更加简洁的方式,使用文件类的text属性:

 File file = new File("E:/a.txt") 
      println file.text 

写入文件

new File('E:/', 'aaa.txt').withWriter {
            write -> write.writeLine('新写入的一行')
        }

上面方式不能做为文件追加,因为每次调用后保留的都是刚刚写入新的数据。
其他操作方法:

  • length(): 返回文件类大小,单位是byte,字节数;
  • isDirectory(): 判断文件是否为文件目录(文件夹);
  • isFile(): 是否为一个文件;
  • exists(): 文件是否存在;
  • mkdir(): 创建文件夹(目录);
  • delete():删除文件;

单独提一下groovy的文件复制:

def f3 = new File("E:/aaa.txt")
def new_file = new File("E:/bbb.txt")
new_file << f3.text

使用 << 快捷符号就完成了从aaa.txt到bbb.txt的复制。使用非常简便。
另外在groovy使用的File类也是来自Java的包,所以可以使用下面列出的用于文件I\O操作的标准Java类:

  • java.io.File
  • java.io.InputStream
  • java.io.OutputStream
  • java.io.Reader
  • java.io.Writer

十一、数字
groovy中的数字实际上表示为对象。原因通常是因为存在对数字执行操作的要求,在原始类型上提供类的概念被称为包装类。(关联java下的包装类)就很好理解了
在groovy中同样可以使用一些数学上的计算公式集合类 Math,如绝对值,最大值,最小值,四舍五入等等。
十二、字符串
groovy中的字符串可以有四种表现形式,分别是单引号,双引号,三引号以及/ /斜杠表示。

'这是一个字符串'   
"zheyeshizifuchuan"  
"'字符串~~~~~—~~~~~~'"  
/ 这个也是字符串 /

字符串操作
1、连接(追加):使用 '+'或者 plus() 或者 concat()方法拼接两个字符串。

 String s4 = "123456"
 String s5 = "7890"
 println s4.concat(s5)
 println(s4.plus(s5))
 println(s4 + s5)

2、重复:在字符串后面使用 *接数字表示前面字符串重复次数。

println('hello' * 3) // 等于hellohellohello;

3、填充:padLeft()/padRight 使用此方法将字符串左边/右边填充到指定长度。默认使用空格填充,有参数可以指定填充字符。

String s4 = "123456"
//padLeft 左边填充
println("左边以#填充至10位${s4.padLeft(10, "#")}")

4、删除:使用minus() 或者 - 表示字符串的删减

 String s4 = "123456"
 String s5 = s4 - "56"
 //String s5 = s4.minus("56) 结果为 1234 

5、反转:使用reverse()方法反转字符串(这下反转字符串再也不用创建StringBuilder 或者遍历了哈)

String s4 = "123456"
String s5 = s4.reverse()

当然还有其他操作,像很多基本的使用就不列举出来,如字符串长度(length),分割(split),截取substring(),某个字符(charAt,indexOf)等等。
十三、列表
列表是用于存储数据项集合的结构。在Groovy中,List保存了一系列对象引用。
List中的对象引用占据序列中的位置,并通过整数索引来区分。
列表文字表示为一系列用逗号分隔并用方括号括起来的对象。
groovy列表使用索引操作符[]索引。列表索引从0开始,指第一个元素。
groovy中的一个列表中的数据可以是任意类型。这java下集合列表有些不同,java下的列表是同种类型的数据集合。
groovy列表可以嵌套列表。如[1,2,[3,4,5],“aaa”]
groovy列表内置有反转方法reverse()。调用List.reverse()可以实现列表反转。
groovy列表内置有排序方法sort()。调用List.sort()可以实现列表反转。
空列表表示为[]
声明一个空集合:

def list1 = []  
def list2 = [1,2,3,4]  
list2.add(12)  
list2.add(12)  
println list1.size()

列表间的几个常用方法:
1、添加:

def list1 = [100, 101]
def list2 = [ 99,98,1]
println list2.plus(list1) //输出结果: [100, 101, 99, 98,1]
// list2.plus(list1) 也可以写成 list2 + list1

2、删除:

def list1 = [12, 13]
def list2 = [11, 2, 33, 12, 13, 16]
println list2.minus(list1) //输出结果: [11, 2, 33, 16]
//list2.minus(list1) 也可以写成 list2 - list1

十四、映射
在groovy中映射(也称为关联数组,字典,表和散列)是对象引用的无序集合。Map集合中的元素由键值访问。 Map中使用的键可以是任何类。当我们插入到Map集合中时,需要两个值:键和值。
举例子
[‘TopicName’:‘Lists’,‘TopicName’:‘Maps’] - 具有TopicName作为键的键值对的集合及其相应的值。
[:] - 空映射
emmmm用Java的角度来看就类似Map了(groovy里也是叫Map)。注意写法上的不同。
groovy中映射的基本使用:

  • boolean containsKey(Object key) – 检查映射中是否包含此键值。
  • Object get(Object key) – 获取映射中指定key的值,如果没有则返回null。
  • Object put(Object key, Object value) – 添加组键值到映射中,如果此前已经包含key,则替换对应的value。
  • Set keySet() – 返回映射中包含所有key的set对象。
  • Collection values() – 返回映射中包含所有的value的Collection对象。
  • int size() – 返回映射中键值对的数量。

十五、groovy中的正则表达式

  • 使用~“regex”表达式本地支持正则表达式。引号中包含的文本表示用于比较的表达式。
  • 表示一行的开始和结束:caret(^)和美元符号($)
  • 加号(+)表示一次或多次,星号(*)用于表示零个或多个出现,问号(?)表示零或一次
  • 元字符{}用于匹配前一个字符的特定数量
  • 句点符号(.)可以表示任何字符。这被描述为通配符
  • 正则表达式可以包括字符类。一组字符可以作为简单的字符序列,包含在元字符[和]中,如[aeiou]中。对于字母或数字范围,可以使用[a-z]或[a-mA-M]中的短划线分隔符。
  • 字符类的补码由方括号内的前导插入符号表示,如[^a-z]中所示,并表示除指定的字符以外的所有字符。下面给出了正则表达式的一些示例。
  • ~ :字符串编译成Pattern,创建正则表达式对象
  • =~ :局部匹配,返回值为Matcher
  • ==~ :全局匹配,左右两边完全相等时返回true,否则返回false
    示例:
    创建一个正则:
 def regex = ~/gro*vy/
 println 'grovy'.matches(regex)  //结果为true

局部匹配:

 def result = regex =~ 'gro'
 println result[0]    //返回匹配的部分: "gro"

十六、Groovy中的面向对象
groovy是基于java的新语言,同样是面向对象,存在类和对象的概念以表示编程语言的对象定向性质。Groovy类是数据的集合和对该数据进行操作的方法,声明了该类定义的对象的状态(数据)和行为。

  • 属性、行为:面向对象的要素,groovy同样支持。创建对象属性,设置对象属性,(setter,getter方法),创建行为(方法)。
  • 继承:继承可以定义为一个类获取另一个类的属性(方法和字段)的过程。使用extends关键字声明为继承关系。继承其他属性的类称为子类(派生类,子类),属性继承的类称为超类(基类,父类)。
  • 接口:接口定义了类需要遵守的契约。接口仅定义需要实现的方法的列表,但是不定义方法实现。
    使用interface关键字声明接口。接口仅定义方法签名。接口的方法总是公开的。在接口中使用受保护或私有方法是一个错误。
  • 内部类:内部类在另一个类中定义。外部类可以像往常一样使用内部类。另一方面,内部类可以访问其外部类的属性,即使它们是私有的。
发布了46 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/FooTyzZ/article/details/98309550
今日推荐