前言

与上文我们知道,JVM作为一个可以将Class文件转换成机器码的平台,只要安装了虚拟机,就可以在上面运行字节码。

同样,只要其他原因在编译过程中生成了字节码,那么照样可以通过JVM在不同平台上运行,这就实现了跨平台能力了。

目前,可以直接在JVM上运行的语言除了Java之外有很多,本文主要介绍九种。正如平时我们了解一个语言时通常会先学这个语言里最经典的一句话——【我爱你】。本文将每种语言通过一段【Hello, World】代码进行演示,看看不同语言的语法有什么不同之处。

Kotlin

Kotlin是一种在JVM上运行的静态类型编程语言,由JetBrains设计开发并开源。

Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

在Google I/O 2017中,Google宣布Kotlin成为Android官方开发语言。

package hello                        //可选的包头
fun main(args: Array<String>){        //包级可见的函数,接受一个字符串数组作为参数println("Hello, World")         //分号可以省略
}

Kotlin也是一个面向对象的语言。

class Hello(val name: String){fun greet(){println("Hello, $name");}
}
fun main(args: Array<String>){Greeter("World").greet()      //创建一个对象不用new关键字
}

想继续深入的朋友可以看看菜鸟的这个教程:Kotlin教程

Groovy

Groovy是Apache旗下的一门基于JVM平台的动态编程语言,它的语法风格跟Java很像,Java程序员可以很快地熟练使用Groovy,即使开发过程中忘记Groovy的语法,也可以用Java的语法继续写,还可以在Java中调用Groovy脚本。但是Groovy独有的特性也使它在开发语言大潮流中独占一席。

class Hello{static void main(String[] args){println("Hello, World");}
}

其实,光是输出语句到控制台的写法就有挺多种了,以下展示几种:

System.out.println("Hello, World");
System.out.println "Hello, World";println("Hello, World")
println 'Hello, World'
println('Hello, World');

想继续深入的朋友可以看看W3Cschool的教程:Groovy教程

Groovy官网的文档和资料也是很不错的:Apache Groovy

Scala

Scala是一门多范式的编程语言,多范式就是可以使用多种编程方法的意思,而目目前比较流行的编程方法有面向过程、面向对象、函数式程序设计方法。Scala设计初衷是要集成面向对象编程和函数式编程的各种特性。

它相比传统编程语言最大的优势在于提供了很好的并行编程基础框架。而且Scala代码能很好地被优化成字节码,运行起来和原生Java一样快。

object HelloWorld{def main(args: Array[String]): Unit = {println("Hello, World");}
}

感兴趣的朋友可以看看菜鸟的教程:Scala教程

Jython

Jython是一个用Java语言写的Python解析器,可以无缝与Java类结合,使用户能够用Python语言来高效生成动态编译的Java字节码。而且Jython同时拥有解释器和编译器,使其无需编译就可以测试程序代码。

print "Hello, World"

如果想在Java中加入Jython的代码还可以这么写:

import org.python.util.PythonInterpreter;public class JythonHelloWorld{public static void main(String[] args){try(PythonInterpreter pyInterp = new PythonInterpreter()){pyInterp.exec("print('Hello, World')");}}
}

感兴趣的朋友可以看看Jython的官网:Jython官网

JRuby

JRuby是用来桥接Java与Ruby的,可以使用比Groovy更加简短的语法来编写代码,并且能让每行代码执行更多的任务。JRuby不仅提供了高级的语法格式,而且也提供了面向对象的实现、闭包等。JRuby跟Ruby相比多了很多基于Java的类库,虽然Ruby也有很多类库,但在数量和广泛性上跟Java是无法相比的。

"puts 'Hello, World'"

JRuby的介绍虽然官网也不错:JRuby官网

但刚开始学习的话比较推荐去社区看看:JRuby中国社区

Fantom

Fantom是一种通用的面向对象编程语言,可以运行在Java Runtime Enviroment、.NET Common Language Runtime和浏览器。Fantom本质上是一种脚本语言,所以也可以使用Fantom解释器来运行。但Fantom并不能使用Java的类库,只能使用自己扩展的类库。

class HelloWorld{static Void main(){echo("Hello, World")}
}

想了解Fantom的朋友可以看看IBM Developer上的介绍:基于 JVM 的新一代编程语言:Fantom

Clojure

Clojure是基于LISP编程语言设计的,可在Java和.NET运行时环境上运行的一种高级的、动态的函数式编程语言。

虽然Clojure也能被直接编译成Java字节码,但无法使用动态语言特性以及直接调用Java类库,与其它的JVM脚本语言不同,Clojure并不算是面向对象的。

(defn hello [& args](println "Hello, World"))

可以在W3Cschool上了解Clojure:Clojure教程

Rhino

Rhino是一个完全使用Java语言编写的开源JavaScirpt实现,目前由Mozilla基金会管理。它在Java程序中为最终用户提供脚本化能力,也就是说可以给JavaScript加个外壳,嵌入到Java中。同时,Rhino的JavaAdapters能够让JavaScript通过调用Java的类来实现特定的功能。Rhino被作为J2SE 6上默认的Java脚本化引擎。

print('Hello, World')

想继续了解的朋友可以看它家官方的文档:Rhino

或者参考这个博文:Rhino – 基于java的javascript实现

Ceylon

Ceylon是一种面向对象,强调静态类型的编程语言。它是由Red Hat创建的一种既可以在JVM上运行,也可以编译为JavaScript的语言。相对于Java来说,它不仅改进了语言的可读性和内置的模块性,还吸收了高阶函数等函数语言特性,所以这语言也以业务计算为重点,但在其他领域也很灵活。

void main(){writeLine("Hello, World");
}

有兴趣的朋友可以参考IBM Developer的文章:Ceylon:真正的进步抑或只是另一种语言?

总结

上述就是目前比较流行的可在JVM上运行的九种语言,再加上Java就刚好10种。因为后文会针对Java进行详细介绍,所以在此就不再赘述啦。本人在查找资料的过程中发现,如果真的要学另一种在JVM上运行的语言,从适用性、普及度来考虑,还是比较推荐Kotlin、Groovy、Scala中挑选。

参考资料:

JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

以及上述提及的资料

不来了解下JVM支持的语言有哪些?相关推荐

  1. ANSI环境下支持多语言输入的单行文本编辑器 V0.01

    File:      SMLInput Name:      ANSI环境下支持多语言输入的单行文本编辑器 Author:    zyl910 Blog:      http://blog.csdn. ...

  2. 如何配置iis使其支持php,iiS PHP,让iiS支持php语言,iiS下配置php运行环境教程图解

    iiS PHP,让iiS支持php语言,iiS下配置php运行环境教程图解? IIs是windows系统下的互联网信息服务,大家主要用于搭建wEB服务器,IIs中已经自带了AsP语言的支持,不过现在许 ...

  3. matlab启动不了jvm,MATLAB ::在-nojvm启动选项下不再支持此功能

    我正在终端中运行Matlab代码,因为稍后我需要在php中调用此代码.但是我得到这些错误:MATLAB ::在-nojvm启动选项下不再支持此功能 [email protected]:~/Deskto ...

  4. oracle rac 高并发性能_高并发业务下 JVM 涉及的垃圾回收与性能问题分析与定位...

    最近好多 Java 的朋友问:"高并发业务场景下,JVM涉及的性能问题好难搞呀--".看来是大家的技术经验相对少了些,拿不准该从哪些地方上手,其实,每个技术人要该懂得怎样更好打造自 ...

  5. 深入理解JVM:Java语言与JVM关系

    在那个电闪雷鸣,群鸟环绕的夜晚,一个不为人知的语言Oak诞生了,此时正值1991年4月份,气温舒适,百花齐放.然而Oak的诞生并没有得到人们的关注,直到1995年5月23号,Oak决定正是更名为Jav ...

  6. python安装在什么系统下最好-学python语言用什么软件比较好?需要安装哪些软件?...

    Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高Python开发人员的编程效率,以下是常用的几款Python代码 ...

  7. 在Unix/Linux上令(java)JVM支持中文输出

    在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如 果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管 ...

  8. asp.net core 实现支持多语言

    asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...

  9. Fusion组件库是如何支持多语言能力的

    随着国际化发展,多语言的需求越来越常见,单一的语言已经远不能满足需求了.作为一个组件库,支持多语言也是基本能力. 多语言功能的本质其实是文本的替换,一个词汇"OK",在英文语境下是 ...

最新文章

  1. 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 )
  2. CC1310射频芯片的433M无线模块设计
  3. 做一个优秀的项目/产品经理
  4. 动态列排序_Excel表格利用函数制作排序器(可依据不同字段、升降序排序)
  5. sql 删除依赖_关系数据库标准语言SQL(二)
  6. 统计学习方法基础总结
  7. 【渝粤教育】国家开放大学2018年秋季 0077-22T古代汉语专题 参考试题
  8. 如何ajax上传图片,ajax上传图片文件
  9. h3c服务器怎么更换无线密码,如何更换无线网密码_怎么更换无线网密码?-192路由网...
  10. 带你撸一台免费云服务器
  11. 锁仓怎么解_锁仓后解锁技巧
  12. python制作英文词典、对单词添加多重释义_Pyqt5实现英文学习词典
  13. html5经纬度定位 源码_利用HTML5定位功能获取经纬度,在根据经纬度利用百度地图获取位置信息...
  14. 【面试】计算机操作系统
  15. python输入一个正整数、将其按逆序输出_Python实现按照指定要求逆序输出一个数字的方法...
  16. FullPage.js – 轻松实现全屏滚动(单页网站)效果的应用
  17. python的cfg是什么模块_使用安装模块设置.py以及设置.cfg
  18. 程序员自学编程被腾讯拒却月入3w是一种怎样的体验?
  19. 【SAP Abap】SAP S/4 ABAP OPEN SQL中WITH的应用案例
  20. numpy获得前n大元素下标

热门文章

  1. 太空垃圾有解决办法?RemoveDEBRIS 卫星将使用鱼叉设备带回垃圾
  2. 【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用
  3. AVS2的GB帧与s帧
  4. 使用BOMC升级 lenovo Thinksystem 和system x系列服务器微码到最新
  5. 定个可以实现的小目标
  6. windows mysql提示:1045 access denied for user 'root'@'localhost' using password ye
  7. 如何让C盘可用空间变大
  8. 请客人(客户)吃饭谈点什么好?
  9. 【爬虫】王者荣耀爬取英雄高清4K图片
  10. HTML的style属性(替代font等标签)