《Groovy程序设计》读书笔记之第二部分 面向Java开发者的Groovy(上)
来源:互联网 发布:jdk 7u79 windows x32 编辑:程序博客网 时间:2024/06/08 13:31
本文是《Groovy程序设计》一书的读书整理笔记系列文章
Hello Groovy & Groovy循环 & 异常处理 & 安全导航操作符
下面是一个java文件实现,与groovy实现的对比,我们采用一层层去除groovy来说多余的内容
Greeting.java
public class Greetings { public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print("ho "); } System.out.print("Merry Groovy..."); }}
去除分号,去除类和方法定义( 类和方法定义在groovy中默认是public )
Greeting.groovy
for (int i = 0; i < 3; i++) { System.out.print("ho ")}System.out.print("Merry Groovy...")
当你看到这段代码的时候,你一定回想“这他x的能执行吗?”,当然这句话是我说的,你不会这么粗鲁。
你存在这样的疑问是正常的,我刚看到也是这样的想法,在一个类中,没有类声明,没有方法声明,第一感觉是不能运行。但是事实结果呢?
$shell: ho ho ho Merry Groovy...
完美的运行了。
我们再次精简, 这次动一动for循环 ( * groovy为我们提供了更简洁的for循环 * )
for(i in 0..3){ print('ho ')}print('Merry Groovy...')
输出结果和上面的一样的。
for循环
for循环的其他一些方式
1、upto : 是groovy向java.long.Integer类中添加的一个便于使用的实例方法,可用于迭代。0.upto(2) {print("$it ")} //这里需要注意,不能使用‘’这种单引号,会当作字符串,输出$it$it$it
upto可以设置上限、下限
2.upto(10) { print("$it ") } //这里表示从2开始循环到10
2、times :如果upto使用从0开始,可以使用times替代
3.times {print("$it ")} //0 1 2
3、step: step会跳过一些值
0.step(10, 2) {print("$it ")} //这里输出10以内的双数
异常处理
异常处理, 在java中,对于所有受检查异常,都是强制需要处理(例如sleep),但是groovy不强制让我们处理,如果没有处理,则会向上传递到调用处
def openFile(fileName) { new FileInputStream(fileName) }try { openFile('hello')} catch (FileNotFoundException ex) { println "oos->" + ex}
安全操作符 ?.
安全导航操作符,在写java的时候我们很多时候需要进行非空判断,防止NullPointException,现在在Groovy中,我们可以直接使用安全导航操作符实现安全验证
def foo(str) { //if (str != null) {str.reverse()} str?.reverse(); //这里使用?.就可以实现上面的判断效果}println foo("evil")println foo(null) //这里输入null,需要进行安全判断?.
对于runtime的简化
println "cmd /C dir".execute().text;
作用相当于runtime 执行的时候一大段代码
JavaBean & Class & Meth
1、类的定义和参数定义
class Wizard { def static learn(trick, action) { println this return this //groovy中返回值如果不定义的话,默认作为没有返回值void }}
这个类包含了一个静态方法,对于静态方法,是可以直接访问的
Wizard.learn('alohomora', {}).learn('expelliarmus', {}) 这里会输出类名
接下来我们看看对于属性定义,在java中,我们访问属性会设置getter,设置属性会设置setter,groovy为对此做了简化。
class Car { def miles = 0 final year //final 声明的属性只提供一个访问器,不提供更改器Car(theYear) { year = theYear }}
对对象进行赋值和访问
Car car = new Car(2008);println "Year: $car.year"println "Miles: $car.miles"car.miles = 25println "Miles: $car.miles"car.year = 1000
这里我们可以对def修饰的属性进行自由的访问和更改,而如果使用final修饰的属性的话,我们只能进行访问,不能更改,因为使用了final修饰的属性不会提供更改器,只提供了访问器,这个和java一致的。
使用private 声明的属性不能在类的外部进行修改,因此要修改private修饰的属性,我们需要提供修改使用的方法。
对于日历我们可以进行代码的写法简化
//Calendar calendar = Calendar.instance //可以使用instance代码替代getInstance()//println calendar.get(Calendar.YEAR)
2、方法定义和多赋值
class Robot { def type, width, height def access(location, weight, fragile) { println "location: $location , weight: $weight , fragile: $fragile" }}Robot robot = new Robot(type: 'arm', width: 22, height: 30)robot.access(1, 2, 3)
如果一个类没有定义默认的构造器的话,再使用的时候,可以使用map键值对的方式,进行构造初始化
groovy中可以把方法和构造器的形参设置为可选的。可选形参必须位于末尾
def log(x, base = 10) { //这里base为可选形参,当我们不传的时候默认为10 Math.log(x) / Math.log(base)}
groovy中可以直接使用多赋值的方法,一次性对多个参数进行赋值
def splitName(fullName) { fullName.split(' ')}def (firstname, lastname) = splitName('kima wang') //使用这种方式副职,完全不需要使用临时变量了println "firstName: $firstname, lastName: $lastname"
多赋值还有一个很好的作用就是可以进行赋值交换
def name1 = 'kima'def name2 = 'wang'println "name1: $name1, name2: $name2"(name1, name2) = [name2, name1]println "name1: $name1, name2: $name2"
在使用多赋值时,如果赋值内容多于参数的话,会丢失多余部分,如果少于的话,会设置为null
def (String cat, String mouse) = ['Tom', 'Jerry', 'Spike']println "$cat and $mouse" //这里只输出tom and jerry , spike丢失def (first, second, third) = ['Tom', 'Jerry']println "$first, $second, $third" //这里输出tom, jerry, null,如果这里的多余变量不能设置为null,则会抛出异常
总结: groovy是轻量级的java
- 1 、 return语句是可选的
- 2 、 分号也是可选的
- 3 、 方法和类默认是公开的(public)
- 4 、 ?. 操作符只有对象引用不为空时才对分配调用
- 5 、 可以使用具名参数初始化javabean
- 6 、 groovy不强迫我们捕获自己不关心的异常 , 这些异常会被传递给代码的调用者
- 7 、 静态方法内可以使用this来引用class对象 。
本节完, 谢谢查阅。
- 《Groovy程序设计》读书笔记之第二部分 面向Java开发者的Groovy(上)
- 《Groovy程序设计》读书笔记之第二部分 面向Java开发者的Groovy(下)
- 《Groovy程序设计》读书笔记之第一部分 groovy起步
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 实战 Groovy: Groovy:Java 程序员的 DSL
- soapUI+groovy 接口测试之部分groovy使用记录
- 用Groovy思考 第二章 Groovy语言的关键特征
- 用Groovy思考 第二章 Groovy语言的关键特征
- Groovy学习:第二章 Groovy语言的关键特征
- groovy-java
- Groovy探索之MOP 十四 对Java类使用Groovy语言的MOP
- JVM语言之Groovy第二篇
- groovy
- groovy
- Groovy
- Groovy
- Groovy
- groovy
- 跑跑免费版
- 理解共轭先验
- [LeetCode]--39. Combination Sum
- 《Groovy程序设计》读书笔记之第一部分 groovy起步
- 匹配每一行以数字开头和以数字结尾的文本
- 《Groovy程序设计》读书笔记之第二部分 面向Java开发者的Groovy(上)
- android studio中gradle更新办法
- Linux信号SIGNAL详解
- usbview vs2015编译错误汇总
- AppWidget源码分析(2)---updateAppWidget过程分析.md
- C++的委托实现 笔记
- FZU 2141 Sub-Bipartite Graph
- HDU5795 A Simple Nim sg函数
- 订餐系统:过去、现在、将来