scala和java的区别

Scala简介

Scala是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃Java这个强大的平台,它运行在Java虚拟机(JavaVirtualMachine)之上,轻松实现和丰富的Java类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。Scala就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。

Java简介

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

scala和java的区别

  • 1、对字符串的支持

scala采用三个双引号“”“支持换行字符串,Java需要采用“+”进行字符串的连接。

  • 2、方法返回值

scala的return是可选的,方法调用会自动返回最后求值的表达式。如果scala使用了return则需要显示指定方法的返回值

Java需要显示的采用return进行值的返回。

  • 3、类和方法修饰符的默认值

scala默认是public,java默认是protected.

  • 4、默认导入的类

scala默认导入java.lang包、scala包、scala.Predef类。

java默认导入java.lang包

  • 5、接口

scala不支持接口interface,采用trait(类似于Java中的抽象类)。

java支持接口

  • 6、类成员和单例对象

scala语言机制上支持单例对象和伴生对象,伴生类。伴生类和伴生对象需要在一个类文件中使用,在使用伴生对象时,系统隐式地调用apply生成一个伴生实例的对象。

java由类成员,单例对象需要自己实现。

  • 7、方法参数

scala支持以函数作为参数,格式为deferror(msg:=》String)表示msg是输入参数,输出参数为String的函数。

java不支持。

scala相对于java存在的优势

相比较与Java,在下觉得Scala最主要的有以下两点优势:

FP泛型支持

如果用多了Spring中大量的template接口,你就会觉得FP其实还是蛮好用的。

而这仅仅是FP好处的冰山一角。

函数其实就是一个input-》output(scala也是这么表示一个函数的),没有任何副作用,与状态无关,由于这种特性,所以函数式的编程范式在分布式领域有很多好处

对于函数式编程,我的知识实在是皮毛,但可以这么说,FP相对与OO有哪些优势,Scala对于Java差不多就有哪些优势。

正因为FP有如此多的优势,所以Java8才引入了FP.从某种程度上来说,Java认可了Scala的做法。

类型系统支持

如果说Java是一种类型安全的语言,那么毫无疑问,Scala的类型更加安全,从某种程度上说,Scala的类型是图灵完备的,而Java不是。我的一位好朋友在这方面研究的比较深(http://hongjiang.info/scala/),而我对与Scala的类型系统的理解,也还是皮毛。

正是以上这两点大优势,造成了Scala比Java更加安全,同时又具备灵活性,想象力。

其他语言层面上的优势

在Java中,你是否有时很想继承多个AbstractClass呢?对不起,Java只支持单继承

在Scala中,你可以进行mixin(Java8也开始引入defaultmethod了呢)

在Java中,想要一个singleton?要么在staticblock中做,要么利用Enum的单例特性完成,或者其他更纠结的方法。

在Scala中,只要声明为object,即为单例。

在Java中,想要延迟加载一个单例?doublecheck吧

在Scala中,只要在object中将变量修饰为lazy即可

在Java中,想要对集合进行一些操作?使用一层一层的for循环吧

在Scala中,使用collection的一些集合操作,即可获得如写SQL般的享受。

在Java中,在并发中想对Future进行回调?对不起,Future不是Listenable(无法支持回调),除非你使用额外的工具(如guava,spring)

在Scala中,本来就主张异步编程,future和promise的配合让人非常愉快。

在Java中,要透明扩展一个第三方库的类怎么办?包装,再加一层。

在Scala中,有强大的implicit机制让你更优雅的做到这一点,同时还能保证类型安全(比起Ruby的monkeypatch,要安全得多)

Scala的表达力很强,相同功能的代码,用Java和Scala的行数不可同日而语。

这些单单是语言层面上的优势,除此之外,Scala还能无缝结合Java

尽管罗列了如此多的好处,但Scala有如下劣势:

语法复杂,学习曲线非常高

国内Scala程序员很难找(目前Scala的影响力也在缓慢扩大,比如Scala社区中的明星Spark的流行也在慢慢拉动Scala的流行,如同rails之于ruby)

社区,生态还比较小,Scala风格的库还非常少(但可以和Java很容易的斜街很多时候弥补了这一点)

你可能感兴趣的:(大数据,大数据)