本文为初学Scala的Java开发者提供了一个Scala例子(Hello world),并对Scala与Java交互的情况作了一些大致的介绍。

AD:

本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。下面先对Scala进行一个简单的介绍,提供一个简单的Scala例子,并描述一下Scala与Java交互的情况。

51CTO编辑推荐:Scala编程语言专题

1 简介

本文仅在对Scala语言和其编译器进行简要介绍。本文的目的读者是那些已经具有一定编程经验,而想尝试一下Scala语言的人们。要阅读本文,你应当具有基础的面向对象编程的概念,尤其是Java语言的。

2 第一个Scala例子

作为学习Scala的第一步,我们将首先写一个标准的HelloWorld,这个虽然不是很有趣,但是它可以让你对Scala有一个最直观的认识而不需要太多关于这个语言的知识。我们的Hello world看起来像这样:

object HelloWorld {      def main(args: Array[String]) {              println("Hello, world!")      }}

程序的结构对Java程序员来说可能很令人怀念:它由一个main函数来接受命令行参数,也就是一个String数组。这个函数的唯一一行代码把我们的问候语传递给了一个叫println的预定义函数。main函数不返回值(所以它是一个procedure method)。所以,也不需要声明返回类型。

对于Java程序员比较陌生的是包含了main函数的object语句。这样的语句定义了一个单例对象:一个有且仅有一个实例的类。object语句在定义了一个叫HelloWorld的类的同时还定义了一个叫HelloWorld的实例。这个实例在第一次使用的时候会进行实例化。

聪明的读者可能会发现main函数并没有使用static修饰符,这是由于静态成员(方法或者变量)在Scala中并不存在。Scala从不定义静态成员,而通过定义单例object取而代之。

2.1 编译实例

我们使用Scala编译器“scalac”来编译Scala代码。和大多数编译器一样,scalac 接受源文件名和一些选项作为参数,生成一个或者多个目标文件。scala编译生成的产物就是标准的Java类文件。

假设我们吧上述代码保存为文件HelloWorld.scala,我们使用下面的命令编译它(大于号“>”表示命令提示符,你不必输入它)

> scalac HelloWorld.scala

这将会在当前目录生成一系列.class文件。其中的一个名为HelloWorld.class 的文件中定义了一个可以直接使用scala命令执行的类。下文中你可以看到这个例子。

2.2 运行实例

一旦完成编译,Scala程序就可以使用scala命令执行了。scala的用法和java很相似,并且连选项也大致相同。上面的例子就可以使用下面的命令运行,这将会产生我们所期望的输出。

> scala -classpath . HelloWorldHello, world!

3 Scala与Java交互

Scala的一个强项在于可以很简单的于已有的Java代码交互,所有java.lang中的类都已经被自动导入了,而其他的类需要显式声明导入。

来看看演示代码吧。我们希望对日期进行格式化处理,比如说用法国的格式。

Java类库定义了一系列很有用的类,比如Date和DateFormat。由于Scala于Java能够进行很好的交互,我们不需要在Scala类库中实现等效的代码,而只需直接吧Java的相关类导入就可以了:

import java.util.{Date, Locale} import java.text.DateFormat import java.text.DateFormat._object FrenchDate {      def main(args: Array[String]) {              val now = new Date              val df = getDateInstance(LONG, Locale.FRANCE)              println(df format now)      }}

Scala的import语句看上去与Java的非常相似,但是它更加强大。你可以使用大括号来导入同一个包里的多个类,就像上面代码中第一行所做的那样。另一个不同点是当导入一个包中所有的类或者符号时,你应该使用下划线(_)而不是星号(*)。这是由于星号在Scala中是一个有效的标识符(例如作为方法名称)。这个例子我们稍后会遇到。

第三行的import语句导入了DataFormat类中的所有成员,这使得静态方法getDateInstance和静态变量LONG可以被直接引用。

在main函数中,我们首先建立了一个Java的Date实例。这个实例默认会包含当前时间。接下来我们一个使用刚才导入的静态函数getDateInstance定义了日期格式。最后我们将使用DataFotmat格式化好的日期打印了出来。最后一行代码显示了Scala的一个有趣的语法:只有一个参数的函数可以使用下面这样的表达式来表示:

df format now

其实就是下面的这个冗长的表达式的简洁写法

df.format(now)

这看起来是一个语法细节,但是它导致一个重要的后果,我们将在下一节进行说明。

另外,我们还应当注意到Scala中可以直接继承或者实现Java中的接口和类。

看过了上面的Scala例子以及Scala与Java交互的方式,下文将介绍Scala的对象。

本文转自http://developer.51cto.com/art/200909/150625.htm,仅供个人学习之用,所有权力归原作者所有。

A Scala Tutorial for Java programmers之(一)Scala入门:Scala例子,以及如何与Java交互相关推荐

  1. A Scala Tutorial for Java Programmers

    A Scala Tutorial for Java Programmers English Español 한국어 Deutsch By Michel Schinz and Philipp Halle ...

  2. 我作为Java后端,分享一下入门Spark编程的经历!

    作者:陌北有棵树,玩Java,架构师社区合伙人! 最近由于工作任务,需要掌握大数据技术栈的相关知识,于是开始了入门大数据的漫漫之路. 相比传统Java后端的技术栈来说,大数据关注的技术点可以说是另一套 ...

  3. java 8 什么软件_Java 8你了解多少呢?Java之被人遗忘的Java 8的八个功能

    一直以来,多线程代码是服务器开发人员的毒药(问问Oracle的Java语言架构师和并行开发大师Brian Goetz).Java的核心库不断加入各种复杂的用法来减少访问共享资源时的线程等待时间.其中之 ...

  4. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  5. java -jar 默认参数_JAVA入门学习指南,建议收藏

    如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...

  6. java决策树算法_「Smile」一下,轻松用Java玩转机器学习

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI Smile,如其名,会是一个让你「笑着用」的好工具. 它的全名叫做 Statistical Machine Intelligence and ...

  7. 雪花算法id长度_【Java】分布式自增ID算法雪花算法 (snowflake,Java版)

    作者:H__D 转载自: https://www.cnblogs.com/h--d/p/11342741.html 一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. ...

  8. java -version 自动被切换的问题 : C:\ProgramData\Oracle\Java\javapath;

    http://www.cnblogs.com/FlyAway2013/p/6004844.html 我把 JAVA_HOME 从8改成了 7 , 为什么还是 显示的8啊 ! E:\sv0\jars&g ...

  9. Scala開發教程(1): 開始神奇的Scala編程之旅

    前面寫了四篇Scala Play Framework開發教程,起了個頭,個人覺得Scala應用會越來越廣泛,因此開通了Scala中文社區論壇以達到推廣Scala開發的目的.該論壇設立了Scala編程( ...

最新文章

  1. 四个常用的Java连接池
  2. java内存分配与管理
  3. R语言实战应用精讲50篇(八)-随机区组设计资料的方差分析
  4. Chrome——我的Chrome插件
  5. pythondjango网页开发_Python-Web开发 Django 简介
  6. 2017年最流行的5个php开发框架视频教程推荐
  7. Python颜色空间转换(sRGB,AdobeRGB,CIE XYZ,Lab,HSV互转)
  8. matlab安装及破解
  9. 苹果 WWDC22 亮点一文汇总解读
  10. 10的28次方C语言,c语言编程测定28的28次方有多少位
  11. 用心成就精品海天讲述不一样的品牌故事
  12. python计算排列组合
  13. 好用的第三方网站ios
  14. C++---四舍五入与保留小数
  15. 【Html】16-字体图标
  16. kubernets(四)创建高可用集群
  17. Python基础之集合set操作
  18. Win10电脑有网其他联网软件能正常使用但打不开浏览器怎么办?
  19. ESP32设备驱动-TEA5767收音机模块驱动
  20. 单链表逆置:空间复杂度O(1)

热门文章

  1. 复选框(checkbox)、单选框(radiobox)的使用
  2. 最大公约数(Greatest Common Divisor)
  3. 为什么要在网站上主动放置沃通全球可信网站认证标志
  4. 1小时教你学会正则表达式
  5. oracle undo head,淺談Oracle的undo管理
  6. CCF201512-2 消除类游戏
  7. CCF201809-1 卖菜
  8. 如何填充自画形状_AI中如何用形状填充
  9. 26日直播预告丨 经典知识库:ASM元数据简介及案例分享
  10. 2套RAC环境修改scanip后客户端连接异常