使用最简单的术语,a variable(变量): 变量名引用的值关联着物理内存的某个位置。和Java一样,Groovy拥有 local variables(本地变量),fields(字段):local variables他们的范围定义为方法的一部分存在。fields的存在范围为类或者对象中。Fields and local variables有太多相同的声明方式,所以同时讲解他们。
- Declaring variables
- Fields and local variables 使用前必须被声明 。
- 声明包括:指定变量名, 可选的类型声明和 修饰符,分配初始值.
- 一旦被定义,变量将通过变量名来引用。
- Groovy 使用Java’的修饰符— private, protected, public ,final(不允许在分配值),static(为类变量),这些修饰符和Java中的意思相同。
- 非静态变量被看到对象变量。
- 在Groovy中, fields 默认的修饰符有着特别的意义(在GroovyBeans中讲解)。
- 变量类型的定义是可选的:但是假如你没有给出类型定义和修饰符定义,你必须使用def来定义变量,来说明此变量为未知类型(哈哈,希望大家能有点思维能力,其实外国人的东西都是套公式的东西,灵活运用在于你的思维能力了。前面说过Groovy一切都是对象,你用def关键字定义的变量,实际是默认值为Object)
- 下面给出一些示例:
class SomeClass { public fieldWithModifier String typedField def untypedField protected field1, field2, field3 private assignedField = new Date() static classField public static final String CONSTA = 'a', CONSTB = 'b' def someMethod(){ def localUntypedMethodVar = 1 int localTypedMethodVar = 1 def localVarWithoutAssignment, andAnotherOne } } def localvar = 1 boundvar1 = 1 def someMethod(){ localMethodVar = 1 boundvar2 = 1 }
- 注意,这里有个规则:在Groovy中,比如你给一个动态类型分配了number类型的值,就不能再用String的类型了 ,反之亦然(在后面的章节会说明原因)。
- Referencing and dereferencing fields
- 在Groovy中你可以通过obj.fieldName来引用变量,同时他提供了额外的能力,你可以使用下标运算符来引用,示例:
class Counter { public count = 0 } def counter = new Counter() counter.count = 1 assert counter.count == 1 def fieldName = 'count' counter[fieldName] = 2 assert counter['count'] == 2