Scala-0.Scala和Java

2019-06-28 10:23:55 浏览数 (1)

Hello World

代码语言:javascript复制
package com.junzerg

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("hello world")
  }
}

编译:

代码语言:javascript复制
scalac HelloWorld.scala

可以看到被编译为HelloWorld.class。就是字节码咯

执行:

代码语言:javascript复制
>scala -classpath . HelloWorld
hello world

和Java整合

预加载所有java.lang下的类,其他类需要显式引入。 例如DateDateFormat

代码语言:javascript复制
import java.util.{Date, Locale}
import java.text.DateFormat._

object FrenchDate {
  def main(args: Array[String]): Unit = {
    val now = new Date
    val df = getDateInstance(LONG,Locale.FRANCE)
    println(df format now)
  }
}

Scala的import的语句比Java牛逼,可以从一个包中引入多个类,方式是用大括号括起来。另一个区别是,引入包或类的所有名称时,用下划线(_)而不是星号(*)。因为星号是Scala的标识符。

第二个import语句能引入DateFormat类的所有成员,所以静态方法getDateInstance可以和静态字段LONG直接可见。

最后一行很有意思,采用一个参数的方法可与中缀语法一起使用。也就是说,表达式:

代码语言:javascript复制
df format now

就是另一个,略显冗长的表达式:

代码语言:javascript复制
df.format(now)

可以从Java类继承并直接在Scala中实现Java接口。

一切皆对象

Scala是一个纯面向对象语言,即一切皆对象。包括数字和功能。和Java不同,Java会区别原始类型(例如布尔和int)和引用类型。

数字是对象

既然数字是对象,那么他就有方法了。事实上。一个如下的算数表达式:

代码语言:javascript复制
1   2 * 3 / x

完全由方法组成。因为它等同于下面的表达式:

代码语言:javascript复制
(1). (((2).*(3))./(x))

也就是说 *等都是有效标识in scala。

0 人点赞