译自
http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html
因为原文是用markdown撰写,译文也直接用markdown格式撰写
github好读版(?)
https://github.com/chikei/scala.github.com/blob/zh_TW/zh/tutorials/
scala-for-java-programmers.md
~~~正文分隔线~~~
## 介绍
此教学将对Scala语言以及编译器做一个简易的介绍。设定的读者为具有程设经验且想
要看Scala功能概要的人。内文假设读者有着基本、特别是Java上的物件导向程设知识。
## 第一个例子
这边用标准的 *Hello world* 程式作为第一个例子。虽然它很无趣,可是这让我们在
仅用少量语言下演示Scala工具。程式如下:
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
Java程式员应该对这个程式的结构感到熟悉:有着一个 `main` 函式,该函式接受一
个字串阵列引数,也就是命令列引数;函式内容为呼叫已定义好的函式 `println` 并
用Hello world字串当引数。 `main` 函式没有回传值(它是程序函式)。因此并不需要
宣告回传型别。
Java程式员不太熟悉的是包著 `main` 函式的 `object` 宣告。这种宣告引入我们一
般称之 *Singleton* 的东西,也就是只有一个实体的类别。所以上面的宣告同时宣告
了一个 `HelloWorld` 类别跟一个这类别的实体,也叫做 `HelloWorld`。该实体会在
第一次被使用到的时候即时产生。
眼尖的读者可能已经注意到这边 `main` 函式的宣告没有带着 `static`。这是因为
Scala没有静态成员(函式或资料栏)。Scala程式员将这成员宣告在单实例物件中,而
不是定义静态成员。
### 编译这例子
我们用Scala编译器 `scalac`来编译这个例子。`scalac` 就像大多数的编译器一样,
它接受原码档当引数,并接受额外的选项,然后产生一个或多个物件档。它产出的物
件档为标准的Java class档案。
如果我们将上面的程式存成 `HelloWorld.scala` 档,编译的指令为( `>` 是提示字
元,不用打):
> scalac HelloWorld.scala
这会在现在的目录产生一些class档案。其中一个会叫做 `HelloWorld.class`,里面
包含着可被 `scala` 直接执行的类别。
### 执行范例
一旦编译过后,Scala程式可以用 `scala` 指令执行。它的使用方式非常的像执行
Java程式的 `java` 指令,并且接受同样的选项。上面的范例可以用以下的指令来执
行并得到我们预期的输出:
> scala -classpath . HelloWorld
Hello, world!
## 与Java互动
Scala的优点之一是它非常的容易跟Java程式码沟通。默认汇入所有 `java.lang` 底
下之类别,其他类别则需要明确汇入。
让我们看个展示这点的范例。取得现在的日期并根据某个特定的国家排版成该国的格
式,如法国。
Java的标准函式库定义了一些有用的工具类别,如 `Date` 跟 `DateFormat`。因为
Scala可以无缝的跟Java互动,这边不需要以Scala实作同样的类别