运行Scala应用 Main方法

转载 2015年11月09日 17:49:56

本文章将介绍运行如何运行scala程序。在Java中,一个类要能独立运行,那么必须具有静态的main方法,如下所示。
Java代码  收藏代码
  1. public static void main(String[] args) {  
  2. ...  
  3. }  

Scala借鉴了这种模式。在Scala中,为了运行一个Scala程序,你必须定义一个Scala对象并为其定义一个main方法:
Java代码  收藏代码
  1. object RunAppDemo {  
  2.     def main(args:Array[String]) {  
  3.         println("Hello, Scala")  
  4.     }  
  5. }  


Scala中的Object相当于java中的静态类,在其上可以定义静态的方法。Scala允许一个类定义自己的“伴生对象”(Companion Object),它们具有相同的名字,必须位于同一个文件中,并且可以互相引用各自的私有成员。Scala的Object也可以独立存在。如果一个Scala Object没有伴生对象,我们称之为“独立对象”(Standardalone Object),反之,对象和类互为友元。

上述代码main方法中的参数args是从命令行中传入的参数列表,具体用法和java类似。

为了使代码更简洁,Scala还提供了另外一种运行Scala程序的方式,那就是直接继承scala.Application接口(Trait)。

直接继承自Application的运行方式:
Java代码  收藏代码
  1. object RunAppWithoutMain extends Application {  
  2.     println("runing scala app without main")  
  3. }  


之所以这里无须定义main方法,那是因为在Application这个接口中定义了一个main方法,main方法在执行时会初始化RunAppWithoutMain这个对象,并执行它的主构造方法,而所
有直接写在对象中的代码都会被scala编译器收集到主构造方法中,于是就被运行了。

第二种方法虽然省略了一些代码,但是也有一些副作用。

直接继承自Application导致的副作用:
1. 无法接受命令行参数。因为args参数不会被传入
2. 在Scala中,如果一个程序是多线程的,那么这个程序必须具有一个main方法。所以第二种写法只能适用于单线程的程序
3. Application这个接口在执行一个程序的代码之前,需要进行一些初始化。而某些JVM不会对这些初始化代码进行优化。

所以第二种方法只适用于一些非常简单的场合,大部分情况不推荐使用。

大数据学习之Scala中main函数的分析以及基本规则(2)

一、main函数的分析 首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下,有助于后面的学习object HelloScala { def main(args: Array[Stri...
  • Poison_H
  • Poison_H
  • 2016年01月04日 10:31
  • 4092

Scala学习笔记1——初始Scala

引入最近因为Spark的兴起,Scala也炙手可热,个人并不认为它是一个新兴的编程语言,虽然它提供了全新的语法,本文主要介绍Scala环境和几种运行方式,以及通过实例观察Scala和JAVA的关系,学...
  • yu616568
  • yu616568
  • 2016年10月22日 18:51
  • 3010

scala 入门demo

http://www.yiibai.com/scala/ /** * Created by Administrator on 2015/9/16. */ object HelloWorld { ...
  • earbao
  • earbao
  • 2015年10月21日 12:05
  • 2256

Scala 基础入门教程

1.前言最近在参加Hadoop和Spark培训,需要使用Scala,自学了一下作为入门,这里作一个记录。2.下载1) 在scala官网下载,地址: http://www.scala-lang.org/...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2016年03月16日 16:14
  • 11803

第3课:在IDE下开发第一个Scala程序纯傻瓜式彻底透彻解析

Scala零基础实战详解!
  • w517424787
  • w517424787
  • 2016年07月30日 09:26
  • 1683

scala 传值参数和传名参数 ():=>和:=>

:=>和():=>的区别 =>和()=>的区别
  • u010652576
  • u010652576
  • 2015年09月18日 19:09
  • 5319

Scala

一 Scala安装与配置 1 安装 2 配置IDEA 二 Scala基础 1 Hello Scala 11 IDEA运行HelloScala程序 12 控制台运行HelloScala程序 ...
  • c391183914
  • c391183914
  • 2017年11月27日 21:05
  • 73

scala学习-Linux命令行运行jar包传入main方法参数

1。eclipse写了一个程序,直接打包成jav普通jar包,然后无法选择主类,但是运行的时候,可以指定参数,(参数在程序里用 args(i)引用,注意是括号) 2。运行的时候,参数跟在jar包后面...
  • qq_21383435
  • qq_21383435
  • 2017年08月18日 11:42
  • 1076

学习Scala:从HelloWorld开始

前言 最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大。 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程。 在刚刚开始读《Scala编程》的时候...
  • brave2211
  • brave2211
  • 2014年04月02日 00:53
  • 11819

SCALA学习笔记(一)

变量 获取变量的值是一个耗时的工作时,可以考虑使用lazy var. lazy val forLater = someTimeConsumingOperation() scala> va...
  • bluishglc
  • bluishglc
  • 2015年02月27日 08:46
  • 23250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行Scala应用 Main方法
举报原因:
原因补充:

(最多只允许输入30个字)