scala helloworld

在这里对Scala实现与Java实现的几个不一样之处作个介绍。html

  • 第一是Scala对HelloWorld的修饰符使用的是object。其实Scala中也有class关键字,那么object关键字和class关键字有什么区别那?简单来讲object关键字定义了一个匿名类,而且建立了该匿名类的单个实例(采用单例模式),该实例名为HelloWorld。因此object中定义的方法自动都是static的。我以为object关键字存在的价值之一就是创建起了面向对象和函数式的桥梁。由于在面向对象的系统中,全部方法都必须存在于类中,而函数式编程中没有类的概念,使用函数无需new类的实例,因此object中的方法都是静态方法,能够直接被调用。进一步解读请到这里git

  • 第二是Scala中对变量的类型的定义方式是变量名在前,类型在后,中间用冒号相隔。缘由之一是代码更可读。由于咱们更关心变量名,而类型其次,尤为是你拥有一个超级长的类型的状况下(好比 HashMap<Shape, Pair<String, String>>);缘由之二听说是这样的方式在实现Scala类型时技术上要简单些。进一步解读请到这里程序员

  • 第三是main函数的返回值是Unit,而不是Java中的Void。为何是这样那?我想是由于Scala为了实现本身的类型系统,对于无显式返回值的函数直接使用Void是不合适的。github

  • 第四是Scala中表达式最后的分号是可选的。缘由就是为了契合函数式编程的哲学,即一切尽量的简单。不写分号程序员一天能够多敲一些代码出来。
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}


object HelloWorld  {
  def main(args: Array[String]): Unit = {
    println("Hello, World!")
  }
}


object HelloWordV2 extends App {
  println("Hello, World!")
}

 

代码从三行减小到了两行,Scala终于胜出了。那么App是个什么鬼?App是一个trait。trait又是什么鬼?trait是Scala中的一个特殊类型,它与Java中的interface很类似,但比interface强大。HelloWordV2添加了对App的扩展后,就自动成为了一个能够运行的程序,因为App中定义了main方法,因此HelloWorldV2中就无需再定义了,牛逼的地方在于HelloWorldV2的body中的代码都会做为main方法中的代码被执行编程

 

不知有没注意到其实main方法是有个叫args的参数的,那么新版HelloWorld中如何使用该参数那?直接使用它就行。函数式编程

 

 

fava:函数

在使用静态方法的时候须要注意一下几个方面:this

在静态方法里只能直接调用同类中其余的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是由于,对于非静态的方法和变量,须要先建立类的实例对象后才可以使用,而静态方法在使用前不用建立任何对象。(备注:静态变量是属于整个类的变量而不是属于某个对象的)spa

静态方法不能以任何方式引用this和super关键字,由于静态方法在使用前不用建立任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。scala

相关文章
相关标签/搜索