8、Groovy

我们用eclipse来学习Groovy吧,需要装下Groovy插件,去官网找下载链接,Groovy版本一定要与你eclipse的版本对应额。
https://github.com/groovy/groovy-eclipse/wiki
下载完成之后,新建Groovy项目:

image.png

简介

package grooy


class FirstGroovy {
    
    static void main(def args){
        println "Hello Groovy!"
    }
}

image.png

看下输出结果:


image.png

对比java的输出语句

System.out.println("Hello World!");

会有以下几个不同之处:

  • 没有System.out命名空间
  • 方法周围没有括号
  • 末尾没有分号
    再来看个例子了解下Groovy中的$
package grooy


class FirstGroovy {
    
    static void main(def args){

        def name="Andy"
        def greeting="Hello,$name!"
        def namesize="length is ${name.size()}" 
        println name
        println greeting
        println namesize
    }
}

输出结果:


image.png

$表示占位符,占位符表达式可以是变量也可以是方法,包含多个变量或者一个方法的占位符表达式需要有$前缀并且需要被{}包裹,包含一个单独变量的占位符表达式可以只包含$前缀。

println new Date().toString();

打印当前日期:


image.png

类、成员变量

我们新建一个Person类


image.png
package grooy

class Person {
    String name;

    public String getName() {
        return name;
    }

}

package grooy


class FirstGroovy {
    
    static void main(def args){

        def person=new Person();
        person.setName("张三");
        println person.getName();
        println person.name;
    }
}

看输出结果:


image.png

有几个疑问?

  • 在Person类中,我们并没有定义setName方法,但是却可以调用
  • 我们除了调用person.getName()方法获取name外还可以直接调用person.name
    请注意,在Groovy中,无论是类还是成员变量都没有明确的访问修饰符,在Groovy中类和方法的访问修饰符都是公有的,而类成员是私有的。
    既然类成员是私有的,为什么可以person.name这样用呢?实际上,你在调用person.name时调用的仍旧是getter方法

方法

在Groovy中,你指不指定方法的返回类型示没有区别的,方法如果要返回值,return也可以省略

package grooy

class Person {
    String name;

    public String getName() {
        return name;
    }
    def square(def num)
    {
        return num*num;
    }
    
    def add={ num->
        num+num
    }

}

package grooy


class FirstGroovy {
    
    static void main(def args){

        def person=new Person();
        println person.square(2);
        println person.add(3);
        def value=person.square 4;
        println value
    }
}

输出结果:


image.png

Closures

Colosures是匿名代码块,可以接受参数,也可以返回值,它可以被作为变量以参数的形式传递给方法
我们来简单定义一个Closure

package grooy


class FirstGroovy {
    
    static void main(def args){

        def instance=new FirstGroovy();
        def value=instance.square 6
        println value
        
    }
    Closure square={
        it*it
    }
    
    
}

输出结果:


image.png

如果你没有明确给closure指定一个参数,则Groovy会自动添加一个参数it,你可以在所有的closure中使用它,如果调用的时候没有传递任何参数,则it为空,it可以让你的代码更加简洁,但是前提是closure中只有一个参数。

List、Map

package grooy


class FirstGroovy {
    
    static void main(def args){

        def instance=new FirstGroovy();
        List list=[1,2,3,4,5]
        list.each(){element->
            println element
            
        }
    }
    
    
    
}

输出:


image.png

或者简写:

package grooy


class FirstGroovy {
    
    static void main(def args){

        def instance=new FirstGroovy();
        List list=[1,2,3,4,5]
        list.each(){
            println it
            
        }
    }
    
    
    
}

package grooy


class FirstGroovy {
    
    static void main(def args){

        def instance=new FirstGroovy();
        Map maps=[key0:10,key1:20]
        println maps.get('key0')
        println maps['key0']
        println maps.key0
        
        println maps.get('key1')
        println maps['key1']
        println maps.key1
    }
    
    
    
}

输出:


image.png

你可能感兴趣的:(8、Groovy)