# 在 java 环境中运行 groovy - 我的类就是你的类

**URL:** <https://www.isharkfly.com/t/java-groovy/6902>\
**Category:** 程序语言\
**Created:** [November 25, 2012, 6:58am UTC](https://www.isharkfly.com/t/java-groovy/6902 "2012-11-25T06:58:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [November 25, 2012, 6:58am UTC](https://www.isharkfly.com/t/java-groovy/6902/1 "2012-11-25T06:58:44Z")

</div>

“Mi casa es su casa”——我家就是你家，这是西班牙语中表示好客的方式，groovy 类和java类之间也存在大量相似的地方。

直到现在，当谈论groovy和java的区别的时候，比较的是两者源代码的区别，但是 groovy联合java之后非常强大，在后台，所有的groovy代码都运行在JVM中并且使用的 是java对象模型，不管你写的是groovy类，或者是groovy脚本，它们都作为java类在 JVM中运行。  
在JVM中运行groovy类有两种方式：

 使用groovyc编译所有的\*.groovy为java的\*.class文件，把这些\*.class文件放在java类路径中，通过java类加载器来加载这些类。

 通过groovy的类加载器在运行时直接加载\*.groovy文件并且生成对象，在这种方式下，没有生成任何\*.class，但是生成了一个java.lang.Class对象的实例，也就是说，当groovy代码中包括一个new MyClass()的表达式时，并且也有一 个MyClass.groovy的文件，这个文件将被解释，一个MyClass的类型将被产生并且增加到类加载器中，在代码中将像从\*.class一样获取到MyClass对象。

图2.7介绍了转换\*.groovy文件为java类的两种方法，任何一种途径产生的类都有相同的java类格式，groovy在源代码级增强java，但是在字节码是与java一样的。

![](https://www.isharkfly.com/images/transparent.png)

图2.7 groovy源代码可以使用groovyc编译，然后通过java类加载器加载，也可以直接通过groovy类加载器直接加载。
