java 结合groovy,Groovy教程:Groovy和Java的相互调用及简单对比
目录:
程序清单
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的相互调用及简单对比相关推荐
- java jwt 验证_教程:用Java创建和验证JWT
java jwt 验证 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多 ...
- 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这两门语言相似度很高(了解它们早期历史 ...
- java和python自学教程_适合 Java开发者学习的Python 入门教程—文海思创
原标题:适合 Java开发者学习的Python 入门教程-文海思创 [文海思创讯]在Java文章频道里,我们大部分人应该对该语言都非常的了解,而且在该生态圈内至少已经呆了好几年了.这让我们有常规和专业 ...
- windows java配置_菜鸟教程 windows 配置java的环境变量
第一步:下载java的JDK 放在你们的D盘下面(其实C盘也一样),然后傻瓜是安装,安装路径一般默认放在 C:\Program Files\Java,这个不需要管. 第二步:直接上图 ... 看懂了吗 ...
- Java组件化开发教程!工信部java软件开发工程师证书
这些面试题包含哪些内容? 借花献佛!朋友干了5年整的Java面试官,给我分享了一份面试官最爱问的Java面试题这份面试题包含了 19 个模块:Java 基础.容器.多线程.反射.对象拷贝.Java W ...
- JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...
- .Net 与 Java 的服务接口相互调用
本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...
- Groovy轻松入门——通过与Java的比较,迅速掌握Groovy (更新于2008.10.18)
摘自: http://www.blogjava.net/BlueSUN/archive/2007/03/10/103014.html Groovy轻松入门--通过与Java的比较,迅速掌握Groovy ...
- Groovy学习()面向Java开发者的Groovy
第一段Groovy代码 // first groovy program for(int i = 0; i < 3; i++) {System.out.println("ho " ...
- 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...
最新文章
- 台式电脑不拉网线上网_用“隐形网线”让台式机快速稳定上网?强迫症有救了...
- 机器学习怎么入门?一份速成指南拿好!
- A01_[NumPy中文网]数组基础(创建数组,多维数组切片,数组属性)、使用数组(基本操作符,数组特殊运算符)、索引(花式索引,布尔索引,缺省索引)
- docker安装教程-centos
- 简约自适应APP下载页源码
- java web不用框架_初学javaweb,远离各自框架
- 配置Apache支持
- 在Linux上如何查看Python3自带的帮助文档?
- python控制电脑定时开机关机软件_用python写一个windows下的定时关机脚本(推荐)
- 【1stopt】批处理拟合
- DTAS棣拓三维公差分析软件容差分析软件蒙特卡洛法:DTAS Talk尺寸联盟参与公益课
- 计算机与科学技术专业毕业设计,计算机科学与技术专业毕业设计论文
- envoy实现_使用Envoy实现一键部署项目
- 随时随地掌上邮,飞邮Android版邮件客户端正式提供试用
- 算法语言Scheme修订6报告 R6RS简体中文翻译
- 关于杨创YC2440uboot移植
- 《吴军:科技史纲60讲》走近科技文明世界
- 初学爬虫-笔趣阁爬虫
- UOS安装Java环境
- PyCharm使用技巧:Compare With(文件比较工具)
热门文章
- 16种常用统计分析软件介绍
- 通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB
- HTML页面跳转的5种方法
- ureport2学习笔记
- 支持iphone的打印服务器,无需购买WiFi打印机,实现电脑、iPad、iPhone共享无线打印...
- 7-10 365次方 (10 分)
- Scratch之自动走迷宫--左手法则
- 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个会动的扔垃圾到垃圾桶动画效果~适合初学者~超简单~ |前端开发 it入门
- cuda10.2+ubuntu18.04+docker视频编解码
- 如何用“项目管理方法论”的思维,提升研发项目管理水平?