No1:

Groovy中分号不是必须的

No2:

Groovy中,单引号和双引号都可以定义一个字符串常量,不同的是单引号标记的是纯粹的字符串常量,而不是对字符串里的表达式做运算,但是双引号可以。

task printStringClass<<{
def str1='单引号'
def str2="双引号" println "单引号定义的字符串类型:"+str1.getClass().name
println "双引号定义的字符串类型:"+str2.getClass().name
} task printStringVar<<{
def name = "张三"
println '单引号的变量计算:${name}'
println "双引号的变量计算:${name}"
}

结果

No3:

List

task printList<<{
def numList=[1,2,3,4,5,6]
println numList.getClass().name println numList[1]//访问第二个元素
println numList[-1]//访问最后一个元素
println numList[-2]//访问倒数第二个元素
println numList[1..3]//访问第二个到第四个元素 numList.each{
println it
}
}

结果

No4:

Map

task printlnMap<<{
def map1=['width':1024,'height':768]
println map1.getClass().name println map1['width']
println map1.height map1.each{
println "key:${it.key},Value:${it.value}"
}
}

结果

No5:

方法括号可省略

task invokeMethod<<{
method1(1,2)
method1 1,2
} def method1(int a,int b){
println a+b
}

结果

No6:

return可以不写,默认执行最后一句

task printMethodReturn<<{
def add1 = method2 1,2
def add2 = method2 5,3
println "add1:${add1},add2:${add2}"
} def method2(int a,int b){
if(a>b){
a
}else{
b
}
}

结果

No7:

代码块

代码块形成过程
//第一步
numList.each({
println it
})
//第二步
numList.each(){
println it
}
//第三步
numList.each{
println it
}

No8:

JavaBean

task helloJavaBean<<{
Person p = new Person()
println "名字是:${p.name}"
p.name = "张三"
println "名字是:${p.name}"
println "年龄是:${p.age}"
} class Person{
private String name
public int getAge(){
12
}
}

结果

注意:能取到age的值是因为定义了getAge()方法,但不能修改age的值,因为没有定义setter方法

No9:

闭包

task helloClosure<<{
//使用我们自定义的闭包
customEach{
println it
}
} def customEach(closure){
//模拟一个有10个元素的集合,开始迭代
for(int i in 1..10){
closure(i)
}
}

结果

当闭包有一个参数时,默认就是it

多个参数如下

task helloClosure<<{
//多个参数
eachMap{k,v->
println "${k} is ${v}"
}
} def eachMap(closure){
def map1 = ["name":"张三","age":18]
map1.each{
closure(it.key,it.value)
}
}

结果

No10:

Groovy闭包有thisObject、owner、delegate三个属性

task helloDelegate<<{
new Delegate().test{
println "thisObject:${thisObject.getClass()}"
println "owner:${owner.getClass()}"
println "delegate:${delegate.getClass()}"
method1()
it.method1()
}
} def method1(){
println "Context this:${this.getClass()} in root"
println "method1 in root"
}
class Delegate{
def method1(){
println "Delegate this:${this.getClass()} in Delegate"
println "method1 in Delegate"
}
def test(Closure<Delegate> closure){
closure(this)
}
}

结果

注:delegate和owner是相等的。优先级:thisObject>owner>delegate?

task configClosure<<{
person{
personName="张三"
personAge=20
dumpPerson()
}
} class Person{
String personName
int personAge
def dumpPerson(){
println "name is ${personName},age is ${personAge}"
}
} def person(Closure<Person> closure){
Person p = new Person();
closure.delegate = p
//委托模式优先
closure.setResolveStrategy(Closure.DELEGATE_FIRST);
closure(p)
}

结果

《Gradle权威指南》--Groovy基础的更多相关文章

  1. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  2. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  3. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  4. Gradle系列之Groovy基础篇

    原文发于微信公众号 jzman-blog,欢迎关注交流. 上一篇学习了 Gradle 的入门知识,Gradle 基于 Groovy,今天学习一下 Groovy 的基础知识,Groovy 是基于 JVM ...

  5. 《Gradle权威指南》--Gradle构建脚本基础

    No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...

  6. 《Gradle权威指南》--Gradle插件

    No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...

  7. 《Gradle权威指南》--Android Gradle NDK支持

    No1: 在根项目下的local.properties文件中配置 sdk.dir=/home/frame/android/android-sdk ndk.dir=/home/frame/android ...

  8. 《Gradle权威指南》--Android Gradle测试

    No1: Android既可以用传统的JUnit测试,也可以用Android的instrument测试. No2: 当我们运行测试的时候,androidTest SourceSet会被构建成一个可以安 ...

  9. 《Gradle权威指南》--Android Gradle多渠道构建

    No1: Build Variant = Build Type + Product Flavor Build Variant:构建的产物 Build Type:构建的类型 Product Flavor ...

随机推荐

  1. Java SE之反射技术[Class](三)

    /** * * @author Zen Johnny * */ package com.cpms.test; import java.lang.reflect.Field; import java.u ...

  2. MSSQL-SELECT&UPDATE动作要申请的锁

    最近在学习[MySQL事务&锁]这块知识,一不留神和MSSQL乱窜了~.~ 文章最初是想查看MySQL vs MSSQL在下面环境产生的阻塞现象会话1开启事务更新数据尚未提交->会话2读 ...

  3. 第2章 线性表《C#数据结构和算法》

    ( )除第一个位置的数据 元素外,其它数据元素位置的前面都只有一个数据元素:( )除最后一个位置的 数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是 一个接一个的排列.因此,可以 ...

  4. jquery 学习(四) - 标签 添加/删除/修改

    HTML代码 <div class="a1"> <div> <span id="a2">aaa</span> & ...

  5. python - 数据描述符(class 内置 get/set/delete方法 )

    数据描述符(class 内置 get/set/del方法 ): # 什么是描述符 # 官方的定义:描述符是一种具有“捆绑行为”的对象属性.访问(获取.设置和删除)它的属性时,实际是调用特殊的方法(_g ...

  6. Java导出List集合到txt文件中——(四)

    有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. package Action.txt; import java.io.BufferedWriter; ...

  7. ubuntu 禁用自带的nouveau显卡驱动,安装NVIDIA显卡驱动

    下载显卡驱动 进入Nvidia的官网,找到对应GTX 750显卡的Linux 64-bit 的驱动程序,然后下载 当点击下载链接后,发现浏览器一直在加载那个*.run文件,很久都加载不完.这时将浏览器 ...

  8. Linux系统7z文件解压

    获取p7zip_16.02_src_all.tar.bz2 1.解压 tar jxvf p7zip_16.02_src_all.tar.bz2 2.编译 cd p7zip_16.02 make &am ...

  9. 一个python脚本解决安装mq的依赖问题

    import tarfile import sys,os from _utils.patrol2 import run_cmd import zipfile def get_version(filen ...

  10. 内存分配方式,堆区,栈区,new/delete/malloc/free

    1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. [2]在栈上创建.在执行函数时 ...