Groovy常用语法汇总

2019-01-23 07:39:57来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

基本语法

1.Grovvy的注释分为//和/**/和java的一样.

2.Grovvy语法可以不已分号结尾.

3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义.

def s1 = 'i am a student $'
println s1
i am a student $

4.双引号“ ”的内容中如果有$号的话,会先对表达式先求值.

def age = 100
def s2 = "他已经 $age 岁了"
println(s2)
他已经 100 岁了

5.三个引号中的字符串支持随意的换行.

def s3 = '''
 x
 y
 z
'''
println(s3)
 x
 y
 z

定义变量

Grovvy中支持动态类型,定义变量的时候可以不指定类型,Grovvy中可以使用关键字def.

def a = 1
def b = "我是谁"
def double = 1.0

定义函数

def fun(){
}
fun()
def fun1(def1,def2){
   println def1+" &&"+def2
}
fun1(1,2)
String fun2(){
    return "返回值"
}
println fun2()
def getSomething(){
    "我是谁"
     1000
}
println getSomething()

注意:

1.无返回类型的函数定义,必须使用def关键字 ,最后一行代码的执行结果就是本函数的返回值

2.如果指定了函数返回类型,则可不必加def关键字来定义函数

断言assert

断言变量为空

def t1 = null
assert t1

断言变量的长度

def t2 = "ab3"
assert t2.size() >3

注意:

1.如果断言发生,断言后面的代码无法执行

循环For

方式一

for (i=0;i<5;i++){
    println i
}

方式二

for(i in 0..5){
  println i
}

其它

for(i in 0..<5){
  println ("hello world")
}

循环time

times表示从0开始循环到4结束

4.times {
    println it
}

三目运算符

def name = 'd'
def result = name=='d'?'cc':"abc"
println result

捕获异常

try {
  5/0
}catch(Exception e){
   e.printStackTrace()
}

Switch

age = 36
def rate
switch (age){
    case 10..26:
        rate = 0.05
          break
    case 27..36:
        rate = 0.06
        break
    case 37..46:
        rate = 0.07
        break
    default:
        throw new IllegalArgumentException()
}
println rate

判断是否为真

Person person
println person?.Data?.name

asType

asType就是数据类型转换

def g1 = '1'
def f1= g1 as int
def f2 = g1.asType(Integer)
println f2

Groovy数据类型

Groovy中的数据类型主要分2种

  • 一个是Java中的基本数据类型。

  • 另外一个是Groovy中的容器类。

  • 最后一个非常重要的是闭包。

      Java 基本类型

def boolean b1 = true
println b1
def int b2 = 100
def String b3 = "hello world"
if(b1){
   println "hello world"
}

      Groovy 容器

List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。

Map:键-值表,其底层对应Java中的LinkedHashMap。

Range:范围,它其实是List的一种拓展。

 List

def aList = [5,'string',false]
println aList
println aList[0]
println "集合的长度:"+aList.size()
aList[10] = 'sss'
println aList
[5, string, false]
5
集合长度:3
[5, string, false, null, null, null, null, null, null, null, 'sss']
集合长度:11

 map

def map = [key1:"value1",key2:"value2",key3:"value3"]
println map
println "map的长度:"+map.size()
println map.keySet()
println map.values()
println map.key1
println map.get("key1")
map.put("key4","value4")
println map.entrySet()
Iterator it = map.iterator()
while(it.hasNext()){
    println "遍历map:"+it.next()
}
map.containsKey("key1")
map.containsValue("values1")
map.clear()
Set set = map.keySet()

range

Range 是 Groovy 对 List 的一种拓展.

def range = 1..5
println range
println "长度:"+range.size()
println "迭代器:"+range.iterator()
println "获取标号为1的元素:" +range.get(1)
println "是否包含元素5:"+range.contains(5)
println "最后一个元素:"+range.last()
//println "移除标号为1的元素:"+range.remove(1)
//清空列表
//range.clear()
println "第一个数据:"+range.from
println "最后一个数据:"+range.to

闭包

模板

def xxx = {paramters -> code}  
//或者  
def xxx = {无参数,纯code}
def fun1 = {
    p1 ->
         def s = "我是一个闭包,"+ p1
}
println(fun1.call())
println(fun1.call("我是一个参数"))
println fun1("我是参数2")

闭包没定义参数的话,则隐含有一个参数,这个参数名字叫it,和this的作用类似。it代表闭包的参数。

def fun2 = {
    it -> "abcd"
}
println fun2.call()

如果在闭包定义时,采用下面这种写法,则表示闭包没有参数!

def fun3 = {
    -> "cccc"
}
println fun3.call()

省略圆括号

def list = [1,2,3]
list.each {
    println it
}
1
2
3

each函数调用的圆括号不见了!原来,Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。比如:

def fun5(int a1,String b1,Closure closure){
   closure()
}
fun5(5,"test",{
    println "i am in closure"
})

以后这样代码会比较多:

task hello{
    doLast{
        println("hello world")
    }
}

案列1:

//字符串与闭包的结合使用
String str2 = 'the 2 and 4 is 6'
//each
str2.each {
    String temp ->println temp
}
//find来查找符合条件的第一个
println str2.find{
    String s -> s.isNumber()
}
//findAll
def sList = str2.findAll{
    String s1 -> s1.isNumber()
}
println sList
//any
def result = str2.any{
    String s -> s.isNumber()
}
println result
//collect
def list2 = str2.collect {
    it.toUpperCase()
}
println list2.toListString()

Java属性

public class Person{
    def String name;
    def int age;

    String getName() {
        return name
    }

    void setName(String name) {
        this.name = name
    }

    int getAge() {
        return age
    }

    void setAge(int age) {
        this.age = age
    }

    @Override
    String toString() {
        return "Person{"+
                "name='"+name+'\''+
        ",age=" + age+
                '}';
    }
}
Person person = new Person()
person.setName("Test")
person.setAge(20)
println(person.toString())

 


原文链接:https://www.cnblogs.com/cleveraboy/p/10269798.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:设计模式:备忘录模式

下一篇:Connection 对象简介 方法解读 JDBC简介(四)