文件和类的关系
-
如果一个 groovy 文件不包括类声明,那么它被作为一个脚本处理。即包装成继承 Script 类实现,自动生成的类的名称与源文件名称相同,文件内容被包装进一个 run 方法中,并且增加了一个 main 方法用来启动脚本。
-
如果 groovy 文件中只包含一个类声明,并且这个类的名称与文件名相同,则含义与 java 中一样。
-
如果一个 groovy 文件包含多个不同访问范围的类(类名没必要和文件名一样)声明,groovyc 编译器完美的为所有在这个文件中声明的类创建
*.class
文件,如果你希望直接调用你的脚本,例如在命令行或者 IDE 中使用 groovy, 那么在你的文件中的第一个类中应该有一个 main 方法。 -
如果一个 groovy 文件混合了类的声明和脚本代码,在这种情况下,脚本代码将变成一个主类被执行,因此不要声明一个与源文件同名的类。
-
当没有进行显式编译的时候,groovy 通过匹配相应名称的
*.groovy
源文件来查找类,在这点上,名称变得十分重要,groovy 仅仅根据类名称是否匹配源文件名称来查找类,当这样的一个文件被找到的时候,在这个文件中声明的所有类都将被转换,并且 groovy 在后面的时间都将能找到这些类。
在包中组织类
Groovy 延续了 Java 包结构组织文件的方式,包结构用来在文件系统中找到相应的类文件。由于*.groovy
源文件不需要编译成*.class
文件,因此在查找类的时候也需要查找*.groovy
文件,Groovy 查找*.groovy
时重用了类路径。当我们查找一个给定的类的时候,如果 groovy 同时找到了一个*.class
和*.groovy
文件,它使用最后修改的那个文件,也就是说,如果源文件在上一次编译之后做了修改,gro
ovy 将重新编译源文件到*.class
文件。
Groovy 跟随 Java 的导入语句,在声明类之前进行导入。默认情况下 groovy 导入了 6 个包和两个类,这使得每个 groovy 源代码程序看起来都包含了下面的初始化语句:
//【工匠若水 加微信 yanbo373131686 联系我,关注微信公众号:码农每日一题 未经允许严禁转载 https://blog.csdn.net/yanbober】
import java.lang.*
import java.util.*
import java.io.*
import java.net.*
import groovy.lang.*
import groovy.util.*
import java.math.BigInteger
import java.math.BigDecimal
在 Groovy 中的 import 语句有另外一