最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Scala day 2 (Compile Scala)

XAMPP下载 admin 632浏览 0评论
 Use scalac Compile Scala:
寫一隻 HelloWorld.scala

object HelloWorld {

def main(args: Array[String]): Unit = {
println(“Hello World!”)
}
}
使用 scalac compile scala 程式,會出現可以在JVM執行的class檔.

daniel@Danielde-MacBook-Pro > scalac HelloWorld.scala
daniel@Danielde-MacBook-Pro > ll
-rwxrwxrwx  1 daniel  staff   670B 11 29 00:01 HelloWorld$.class
-rwxrwxrwx  1 daniel  staff   608B 11 29 00:01 HelloWorld.class
-rwxrwxrwx  1 daniel  staff    97B 11 22 22:21 HelloWorld.scala

執行java HelloWorld,卻出現錯誤.

daniel@Danielde-MacBook-Pro > java HelloWorld
Exception in thread “main” java.lang.NoClassDefFoundError: scala/Predef$
at HelloWorld$.main(HelloWorld.scala:4)
at HelloWorld.main(HelloWorld.scala)
Caused by: java.lang.ClassNotFoundException: scala.Predef$
at java.net

.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 2 more
上網查了一下說是少了scala-library.jar,所以改成這樣執行:

daniel@Danielde-MacBook-Pro > java -cp “scala-2.12.4/lib/scala-library.jar:.” HelloWorld
Hello World!
執行成功~因為沒有設classpath=. (當前目錄),所以-cp時要自己加.

另外上面的例子 compiler 後會產生兩個.class 檔的原因是因為 HelloWorld.scala 是 objcet 的關係.object HelloWorld 會轉成 HelloWorld$.class,但由於 sacala 的 object 都是 singleton 的,在 JVM 裡類似 static 的物件,所以會產生一個 HelloWorld.class 裡面放的都是 static 一些成員.
如果是 class 的話只會產生一個class檔.寫一隻 Student class :

class Student {
val id = “”
val name = “”
}
然後再 compiler 看看,就只會產生一個 class 檔了 :

daniel@Danielde-MacBook-Pro > ll
total 1536
-rwxrwxrwx  1 daniel  staff    46B 12  5 11:39 Student.scala
daniel@Danielde-MacBook-Pro > scalac Student.scala
daniel@Danielde-MacBook-Pro > ll
total 1792
-rwxrwxrwx  1 daniel  staff   857B 12  5 11:41 Student.class
-rwxrwxrwx  1 daniel  staff    46B 12  5 11:39 Student.scala
總結
由於sacla是基於JVM上的語言,所以complie後還是會產生class檔,可在JVM執行.

转载请注明:XAMPP中文组官网 » Scala day 2 (Compile Scala)

您必须 登录 才能发表评论!