目录:

程序清单

Groovy运行HelloGroovy

Java运行HelloJava

Java运行HelloGroovy

字节码

[一]、程序清单

Groovy代码:HelloGroovy.groovy

println "Hello Groovy welcome to www.micmiu.com"

1

println"Hello Groovy welcome to www.micmiu.com"

Java代码:HelloJava.java

public class HelloJava {

/**

* @param args

*/

public static void main(String[] args) {

System.out.println("Hello Java welcome to www.micmiu.com");

}

}

1

2

3

4

5

6

7

8

9

10

11

publicclassHelloJava{

/**

* @param args

*/

publicstaticvoidmain(String[]args){

System.out.println("Hello Java welcome to www.micmiu.com");

}

}

[二]、Groovy运行HelloGroovy

按win+R键 输入cmd 回车进入dos控制台界面,执行如下命令:

D:\test\groovy>groovy HelloGroovy.groovy

Hello Groovy welcome to www.micmiu.com

D:\test\groovy>groovy HelloGroovy

Hello Groovy welcome to www.micmiu.com

1

2

3

4

5

D:\test\groovy>groovyHelloGroovy.groovy

HelloGroovywelcometowww.micmiu.com

D:\test\groovy>groovyHelloGroovy

HelloGroovywelcometowww.micmiu.com

[三]、Java运行HelloJava

在控制台界面中执行如下命令:

D:\test\groovy>javac HelloJava.java

D:\test\groovy>java HelloJava

Hello Java welcome to www.micmiu.com

1

2

3

4

D:\test\groovy>javacHelloJava.java

D:\test\groovy>javaHelloJava

HelloJavawelcometowww.micmiu.com

[四]、Java运行HelloGroovy

用groovyc 编译 HelloGroovy.groovy源文件:

D:\test\groovy>groovyc HelloGroovy.groovy

D:\test\groovy>tree /F

卷 work 的文件夹 PATH 列表

卷序列号为 2AF7-9BD9

D:.

HelloGroovy.class

HelloGroovy.groovy

HelloJava.class

HelloJava.java

没有子文件夹

1

2

3

4

5

6

7

8

9

10

11

12

D:\test\groovy>groovycHelloGroovy.groovy

D:\test\groovy>tree/F

卷work的文件夹PATH列表

卷序列号为2AF7-9BD9

D:.

HelloGroovy.class

HelloGroovy.groovy

HelloJava.class

HelloJava.java

没有子文件夹

运用java 执行编译后的类:HelloGroovy.class:

D:\test\groovy>java HelloGroovy

Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/Script

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)

at java.lang.ClassLoader.defineClass(ClassLoader.java:616)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14

1)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)

at java.net.URLClassLoader.access$000(URLClassLoader.java:58)

at java.net.URLClassLoader$1.run(URLClassLoader.java:197)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

Caused by: java.lang.ClassNotFoundException: groovy.lang.Script

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

... 12 more

Could not find the main class: HelloGroovy. Program will exit.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

D:\test\groovy>javaHelloGroovy

Exceptioninthread"main"java.lang.NoClassDefFoundError:groovy/lang/Script

atjava.lang.ClassLoader.defineClass1(NativeMethod)

atjava.lang.ClassLoader.defineClassCond(ClassLoader.java:632)

atjava.lang.ClassLoader.defineClass(ClassLoader.java:616)

atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:14

1)

atjava.net.URLClassLoader.defineClass(URLClassLoader.java:283)

atjava.net.URLClassLoader.access$000(URLClassLoader.java:58)

atjava.net.URLClassLoader$1.run(URLClassLoader.java:197)

atjava.security.AccessController.doPrivileged(NativeMethod)

atjava.net.URLClassLoader.findClass(URLClassLoader.java:190)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:307)

atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:248)

Causedby:java.lang.ClassNotFoundException:groovy.lang.Script

atjava.net.URLClassLoader$1.run(URLClassLoader.java:202)

atjava.security.AccessController.doPrivileged(NativeMethod)

atjava.net.URLClassLoader.findClass(URLClassLoader.java:190)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:307)

atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:248)

...12more

Couldnotfindthemainclass:HelloGroovy.Programwillexit.

这样直接运行会出错,是因为没有把 Groovy 相关的jar包添加到Java的CLASSPATH中,执行如下命令即可正确运行:

D:\test\groovy>java -cp .;%GROOVY_HOME%\embeddable\groovy-all-2.0.1.jar HelloGroovy

Hello Groovy welcome to www.micmiu.com

1

2

D:\test\groovy>java-cp.;%GROOVY_HOME%\embeddable\groovy-all-2.0.1.jarHelloGroovy

HelloGroovywelcometowww.micmiu.com

这样Java就可以正常的运行Groovy的程序了。

[五]、字节码

运用javap 查看编译后类文件的字节码信息:

HelloJava.class:

D:\test\groovy>javap HelloJava

Compiled from "HelloJava.java"

public class HelloJava extends java.lang.Object{

public HelloJava();

public static void main(java.lang.String[]);

}

1

2

3

4

5

6

D:\test\groovy>javapHelloJava

Compiledfrom"HelloJava.java"

publicclassHelloJavaextendsjava.lang.Object{

publicHelloJava();

publicstaticvoidmain(java.lang.String[]);

}

HelloGroovy.class:

D:\test\groovy>javap HelloGroovy

Compiled from "HelloGroovy.groovy"

public class HelloGroovy extends groovy.lang.Script{

public static transient boolean __$stMC;

public static long __timeStamp;

public static long __timeStamp__239_neverHappen1343966577689;

public HelloGroovy();

public HelloGroovy(groovy.lang.Binding);

public static void main(java.lang.String[]);

public java.lang.Object run();

public java.lang.Object this$dist$invoke$3(java.lang.String, java.lang.Objec

t);

public void this$dist$set$3(java.lang.String, java.lang.Object);

public java.lang.Object this$dist$get$3(java.lang.String);

protected groovy.lang.MetaClass $getStaticMetaClass();

public static void __$swapInit();

static {};

public java.lang.Object super$3$getProperty(java.lang.String);

public java.lang.String super$1$toString();

public void super$3$setProperty(java.lang.String, java.lang.Object);

public void super$1$notify();

public void super$3$println();

public void super$1$notifyAll();

public void super$3$print(java.lang.Object);

public void super$3$printf(java.lang.String, java.lang.Object[]);

public java.lang.Object super$1$clone();

public java.lang.Object super$3$evaluate(java.lang.String);

public void super$1$wait();

public groovy.lang.MetaClass super$2$getMetaClass();

public void super$1$wait(long, int);

public void super$2$setMetaClass(groovy.lang.MetaClass);

public java.lang.Class super$1$getClass();

public groovy.lang.Binding super$3$getBinding();

public void super$1$finalize();

public void super$3$printf(java.lang.String, java.lang.Object);

public void super$3$setBinding(groovy.lang.Binding);

public void super$1$wait(long);

public void super$3$run(java.io.File, java.lang.String[]);

public java.lang.Object super$3$evaluate(java.io.File);

public void super$3$println(java.lang.Object);

public boolean super$1$equals(java.lang.Object);

public java.lang.Object super$3$invokeMethod(java.lang.String, java.lang.Obj

ect);

public int super$1$hashCode();

static java.lang.Class class$(java.lang.String);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

D:\test\groovy>javapHelloGroovy

Compiledfrom"HelloGroovy.groovy"

publicclassHelloGroovyextendsgroovy.lang.Script{

publicstatictransientboolean__$stMC;

publicstaticlong__timeStamp;

publicstaticlong__timeStamp__239_neverHappen1343966577689;

publicHelloGroovy();

publicHelloGroovy(groovy.lang.Binding);

publicstaticvoidmain(java.lang.String[]);

publicjava.lang.Objectrun();

publicjava.lang.Objectthis$dist$invoke$3(java.lang.String,java.lang.Objec

t);

publicvoidthis$dist$set$3(java.lang.String,java.lang.Object);

publicjava.lang.Objectthis$dist$get$3(java.lang.String);

protectedgroovy.lang.MetaClass$getStaticMetaClass();

publicstaticvoid__$swapInit();

static{};

publicjava.lang.Objectsuper$3$getProperty(java.lang.String);

publicjava.lang.Stringsuper$1$toString();

publicvoidsuper$3$setProperty(java.lang.String,java.lang.Object);

publicvoidsuper$1$notify();

publicvoidsuper$3$println();

publicvoidsuper$1$notifyAll();

publicvoidsuper$3$print(java.lang.Object);

publicvoidsuper$3$printf(java.lang.String,java.lang.Object[]);

publicjava.lang.Objectsuper$1$clone();

publicjava.lang.Objectsuper$3$evaluate(java.lang.String);

publicvoidsuper$1$wait();

publicgroovy.lang.MetaClasssuper$2$getMetaClass();

publicvoidsuper$1$wait(long,int);

publicvoidsuper$2$setMetaClass(groovy.lang.MetaClass);

publicjava.lang.Classsuper$1$getClass();

publicgroovy.lang.Bindingsuper$3$getBinding();

publicvoidsuper$1$finalize();

publicvoidsuper$3$printf(java.lang.String,java.lang.Object);

publicvoidsuper$3$setBinding(groovy.lang.Binding);

publicvoidsuper$1$wait(long);

publicvoidsuper$3$run(java.io.File,java.lang.String[]);

publicjava.lang.Objectsuper$3$evaluate(java.io.File);

publicvoidsuper$3$println(java.lang.Object);

publicbooleansuper$1$equals(java.lang.Object);

publicjava.lang.Objectsuper$3$invokeMethod(java.lang.String,java.lang.Obj

ect);

publicintsuper$1$hashCode();

staticjava.lang.Classclass$(java.lang.String);

}

从字节码中可以看出主要的main方法是一样的:

public static void main(java.lang.String[]);

1

publicstaticvoidmain(java.lang.String[]);

只是区别在:extends java.lang.Object 或提供的类extends groovy.lang.Script,而这些区别对于一位coder来说是透明的,无需显式注明。

到此本文讲解基本结束。

java 结合groovy,Groovy教程:Groovy和Java的相互调用及简单对比相关推荐

  1. java jwt 验证_教程:用Java创建和验证JWT

    java jwt 验证 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多 ...

  2. asp.net 与 java 2017_[ASP.net教程]C#与JAVA学习感悟

    [ASP.net教程]C#与JAVA学习感悟 0 2015-10-06 23:00:07 C#与JAVA学习感悟 学完C#与JAVA,感觉收获良多.C#与JAVA这两门语言相似度很高(了解它们早期历史 ...

  3. java和python自学教程_适合 Java开发者学习的Python 入门教程—文海思创

    原标题:适合 Java开发者学习的Python 入门教程-文海思创 [文海思创讯]在Java文章频道里,我们大部分人应该对该语言都非常的了解,而且在该生态圈内至少已经呆了好几年了.这让我们有常规和专业 ...

  4. windows java配置_菜鸟教程 windows 配置java的环境变量

    第一步:下载java的JDK 放在你们的D盘下面(其实C盘也一样),然后傻瓜是安装,安装路径一般默认放在 C:\Program Files\Java,这个不需要管. 第二步:直接上图 ... 看懂了吗 ...

  5. Java组件化开发教程!工信部java软件开发工程师证书

    这些面试题包含哪些内容? 借花献佛!朋友干了5年整的Java面试官,给我分享了一份面试官最爱问的Java面试题这份面试题包含了 19 个模块:Java 基础.容器.多线程.反射.对象拷贝.Java W ...

  6. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  7. .Net 与 Java 的服务接口相互调用

    本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...

  8. Groovy轻松入门——通过与Java的比较,迅速掌握Groovy (更新于2008.10.18)

    摘自: http://www.blogjava.net/BlueSUN/archive/2007/03/10/103014.html Groovy轻松入门--通过与Java的比较,迅速掌握Groovy ...

  9. Groovy学习()面向Java开发者的Groovy

    第一段Groovy代码 // first groovy program for(int i = 0; i < 3; i++) {System.out.println("ho " ...

  10. 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )

    文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...

最新文章

  1. 台式电脑不拉网线上网_用“隐形网线”让台式机快速稳定上网?强迫症有救了...
  2. 机器学习怎么入门?一份速成指南拿好!
  3. A01_[NumPy中文网]数组基础(创建数组,多维数组切片,数组属性)、使用数组(基本操作符,数组特殊运算符)、索引(花式索引,布尔索引,缺省索引)
  4. docker安装教程-centos
  5. 简约自适应APP下载页源码
  6. java web不用框架_初学javaweb,远离各自框架
  7. 配置Apache支持
  8. 在Linux上如何查看Python3自带的帮助文档?
  9. python控制电脑定时开机关机软件_用python写一个windows下的定时关机脚本(推荐)
  10. 【1stopt】批处理拟合
  11. DTAS棣拓三维公差分析软件容差分析软件蒙特卡洛法:DTAS Talk尺寸联盟参与公益课
  12. 计算机与科学技术专业毕业设计,计算机科学与技术专业毕业设计论文
  13. envoy实现_使用Envoy实现一键部署项目
  14. 随时随地掌上邮,飞邮Android版邮件客户端正式提供试用
  15. 算法语言Scheme修订6报告 R6RS简体中文翻译
  16. 关于杨创YC2440uboot移植
  17. 《吴军:科技史纲60讲》走近科技文明世界
  18. 初学爬虫-笔趣阁爬虫
  19. UOS安装Java环境
  20. PyCharm使用技巧:Compare With(文件比较工具)

热门文章

  1. 16种常用统计分析软件介绍
  2. 通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB
  3. HTML页面跳转的5种方法
  4. ureport2学习笔记
  5. 支持iphone的打印服务器,无需购买WiFi打印机,实现电脑、iPad、iPhone共享无线打印...
  6. 7-10 365次方 (10 分)
  7. Scratch之自动走迷宫--左手法则
  8. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个会动的扔垃圾到垃圾桶动画效果~适合初学者~超简单~ |前端开发 it入门
  9. cuda10.2+ubuntu18.04+docker视频编解码
  10. 如何用“项目管理方法论”的思维,提升研发项目管理水平?