1 类、对象、方法
1.1 类
Groovy类,默认public。
下边的Groovy类,叫做Task.groovy
package com.vogella.groovy.first
class Task { String summary String description Date dueDate } |
1.2 对象 (POGO) and 成员变量(fields)
Groovy中的所有成员变量默认private。Groovy会自动创建getter和setter方法,为每个成员变量。如果你将该类注解或者对一个成员变量使用@Bindable进行注解,Groovy也会增加PropertyChangeSupport
到该类或者该成员变量。一个Groovy类适应java bean规范。
Groovy对象经常叫做Plain Old Groovy Objects (POGO)。
l 访问成员变量的方法是:直接使用getter和setter方法,或者直接使用name。
l Groovy也支持数组下标访问(object[property])。
l 即使你使用name方法访问,Groovy也会调用getter或setter方法。
l 如果一个成员变量不可改变如定义了final,此时Groovy不能提供setter方法。
1.3 构造方法
Groovy的构造方法中可以定义参数。这个构造方法也被叫做基于map的构造器,因为它使用property:value
的map标记。
如果一个构造方法被使用了,Groovy首先调用默认的构造方法,然后调用这些成员变量的setter方法。
如果你在Groovy代码中调用了java类,该“带参数的构造方法”也能使用。
以下例子显示了带参数的构造方法。
package com.vogella.groovy.first
class Person { String firstName String lastName int age def address static void main(def args) { Person p = new Person() //使用自动生成的访问方法 p.setFirstName("成员变量赋值1") //尽管我们直接调用name,但是,以下仍然使用自动生成的setter方法。 p.lastName="成员变量赋值2" p.address=("北三环马甸东路") println(p.firstName+" "+p.lastName); //使用自动生成带参数的构造方法 p = new Person(firstName:"构造方法赋值1",lastName:"构造方法赋值2"); println(p.firstName+" "+p.lastName); } } |
输出
1.4 验证相等: == 和is()方法
l 对于==
验证值是否相等,而不是引用。
l 对于is()
验证引用是否相等,但是我验证 字符串值 时却相等。
在Groovy中,null==null返回true。如果两个引用地址指向同一个对象,则也是true。如果一个对象实现了compareTo
方法,Comparable被使用,可以使用equals
方法。
1.5 弱类型的方法中的参数与返回值
Groovy允许有弱类型的参数值。弱类型参数值默认为0.
package first
class Hello {
static main(args) { println sum(1,5) println sum(1,2,5) } static sum(a,b,c=0) { a+b+c } } |
输出:
我发现,sum方法中没有返回值类型。尝试着加入int,String,结果输出跟没加返回值类型相同。又尝试着加入void,运行后,发现返回的是null。
1.6 方法中默认参数
In Groovy you assign default values to parameters in a method. If a default value for a parameter is defined, Groovy offers two method signatures: one with all parameters and one where the parameter with a default value is omitted. If you use multiple parameters with default values then the right most parameter with a default value is first eliminated then the next, etc.
Groovy会为一个方法中的参数分配一个默认值。