Java HelloWorld vs Scala HelloWorld

对于熟悉java语言的开发者来说,如果要学习Scala,首先,我们拿java下的helloworld程序与Scala下的helloworld程序进行比较一下,你一定知道java下面,如果要运行一个程序,需要有一个公共的静态main方法,这个方法需要传入一个数组参数,并且返回值为void,如下所示:

package javaapplication;
public class Main {
   public static void main(String[] args) {
       System.out.println("Hello World");
   }
}

在Scala中,完成类似功能的程序,如下:

package scalaapplication
 object Main {
def main(args: Array[String]): Unit = {
println("Hello World")
}
 }

上面两个程序的输出都是打印出Hello World,下面我们比较和对比一下这两个程序:

  1. 两个程序都有包的声明。在java中,包声明或者其他语句都是以分号(;)结束的,在Scala中,这个不是必须的。在Scala中,编译器是不会关心语句是否以分号结束,语句的结束是由断行来决定的,如果在同一行写多个语句,还是需要分号的。
  2. 虽然引入其他包的语句在上面两个程序中没有显示的表现出来,在Java和Scala中都是需要的。
  3. 这两个程序之间的主要区别,Java程序有一个class的声明,而Scala程序则有一个object的声明。

从概念上来讲,类是对象的蓝本,而对象是类的具体实例。

在Java中,我们使用在类名前面加上new关键字来创建一个实例,在Scala中,我们可以直接定义一个如上的实例,我们也可以像在Java语言中那样来定义类和创建实例。稍侯,我们将了解到为什么我们直接在Scala中定义一个实例而不是一个类。

  1. 上面的程序中,Java的类和Scala的对象都是公共的。在Java中,类和方法的访问权限public需要显示的标注。在Scala中,类和方法默认是public的,也就是说,如果没有明确的访问标识符,类和方法就是public的。
  2. Java和Scala中,main方法的定义很相似但是又不同,下面是两个main方法定义的不同指出的分析:

def关键字是标记Scala中任何函数定义的开始,在Java中,没有对应的关键字。最主要的不同是,在Scala的main方法上,没有static的关键字。Scala是纯面向对象的语言,所以就没有静态的东西之说。尽管如此,在Scala中,为了达到同样的效果,Scala允许定义单例对象,单例对象,很像一个类的定义,但是使用关键字object,而不是class。在上面的程序中,Main就是一个单例对象。简单的来讲,对于一个java开发者来说,Scala中的单例对象和Java中的静态方法类似,这也就是我们在上面的程序上为什么定义一个object,而不是一个class。

下面一个重要的事情是,在Scala的main方法中,有一个关键字Unit,它是函数的返回值类型。如果这个方法所做的事情就是产生相应的副作用而不返回任何指定的值,那么,这个方法的返回值为Unit。在我们这个程序中,其副作用是打印出“Hello World”。

  1. Java和Scala程序都是使用{}来标记程序的开始和结束
  2. Java程序在java源文件中显示的银雨java.lang的包的成员,Scala也会这样做,同时,Scala会在每个Scala源程序中将单例对象标记为Predef。Scala程序中的println方法就是被标记为Predef的。
  3. 在java中,一个public类的名字必须和源文件的名字相同。在Scala中,没有这样的要求,但是,建议开发者这样做,因为这样做有利于其他开发者来定位源文件的位置。
  4. 现在,我们通过命令行来运行上面的程序:

Java:

$ javac Main.java
$ java Main
$ Hello World

Scala:

$ scalac Main.scala
$ scala Main
$ Hello World

从上面的命令行可以看出,运行两种语言是十分相似的。java编译器和scala编译器的输出都是class文件,这个class文件可以在同一个JVM中运行,并输出下面的结果:

$ Hello World

原文地址:http://www.javabeat.net/2012/06/java-helloworld-vs-scala-helloworld/

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>