本文章将介绍运行如何运行scala程序。在Java中,一个类要能独立运行,那么必须具有静态的main方法,如下所示。
public static void main(String[] args) {
...
}
Scala借鉴了这种模式。在Scala中,为了运行一个Scala程序,你必须定义一个Scala对象并为其定义一个main方法:
object RunAppDemo {
def main(args:Array[String]) {
println("Hello, Scala")
}
}
Scala中的Object相当于java中的静态类,在其上可以定义静态的方法。Scala允许一个类定义自己的“伴生对象”(Companion Object),它们具有相同的名字,必须位于同一个文件中,并且可以互相引用各自的私有成员。Scala的Object也可以独立存在。如果一个Scala Object没有伴生对象,我们称之为“独立对象”(Standardalone Object),反之,对象和类互为友元。
上述代码main方法中的参数args是从命令行中传入的参数列表,具体用法和java类似。
为了使代码更简洁,Scala还提供了另外一种运行Scala程序的方式,那就是直接继承scala.Application接口(Trait)。
直接继承自Application的运行方式:
object RunAppWithoutMain extends Application {
println("runing scala app without main")
}
之所以这里无须定义main方法,那是因为在Application这个接口中定义了一个main方法,main方法在执行时会初始化RunAppWithoutMain这个对象,并执行它的主构造方法,而所
有直接写在对象中的代码都会被scala编译器收集到主构造方法中,于是就被运行了。
第二种方法虽然省略了一些代码,但是也有一些副作用。
直接继承自Application导致的副作用:
1. 无法接受命令行参数。因为args参数不会被传入
2. 在Scala中,如果一个程序是多线程的,那么这个程序必须具有一个main方法。所以第二种写法只能适用于单线程的程序
3. Application这个接口在执行一个程序的代码之前,需要进行一些初始化。而某些JVM不会对这些初始化代码进行优化。
所以第二种方法只适用于一些非常简单的场合,大部分情况不推荐使用。
分享到:
相关推荐
Scala学习笔记,大全笔记
学习scala笔记,学习scala笔记,学习scala笔记,学习scala笔记,学习scala笔记,
该文档详细的讲述了Scala的基础操作方法和高级使用方法
scala 学习笔记 方法 函数 类 对象 特质 推断 注解 编译 隐式转换 尾递归 元组 列表
scala学习笔记,适合初学scala的人使用,通俗易懂,小案例适合练手
ScalaOverview.pdf ScalaTutorial.pdf ProgrammingInScala.pdf(这本是书) 博文链接:https://dogstar.iteye.com/blog/182673
[Scala学习笔记-中文资料] 从java角度看Scala
scala学习
Scala-学习资料-mht.rar。Scala学习资料 mht网页格式。
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成...Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
第 1 章 SCALA 的概述 11.1 学习 SDALA 的原因11.2 SCALA 语言诞生小故事 1以及 JVM 的关系分析图21.4 SCALA 语言的
Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...
结合实例讲解scala语法,代码可复制,有注释,有重点。一共5份PDF文档,轻松入门也可进阶。
scala-learn:scala学习笔记
scala学习视频资料以及讲义,从基础的环境配置开始讲起,以及后面具体案例开发.适合新手学习,还有具体讲义对照复习查看。
刚接触Scala,所以并不是很习惯这种函数式编程风格,就从现在的第一篇笔记开始记录这个学习过程啦!笔记来源于《Scala编程》的学习。 从文本读取文本行 初步目标: 构建一个脚本从文本读取文本行,并将它们打印出来...