0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文看懂scala和java的区别

姚小熊27 来源:网络整理 2018-03-07 18:30 次阅读

Scala简介

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

Java简介

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

Java具有简单性、面向对象、分布式、健壮性、安全性、平***立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

Java的工作原理

一文看懂scala和java的区别

由四方面组成:

(1)Java编程语言

(2)Java类文件格式

(3)Java虚拟机

(4)Java应用程序接口

当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类[22],通过调用类(这些类实现了JavaAPI)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的JavaAPI调用。

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很容易的斜街很多时候弥补了这一点)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2903

    浏览量

    102928
  • scala
    +关注

    关注

    0

    文章

    42

    浏览量

    6330
收藏 人收藏

    评论

    相关推荐

    java是什么

     表达出来,那么计算机能看懂,就能够按照我们要求运行,而这个过程就是我们说的使用 Java 编程,所以我们讲 Java种计算机编程语言。为了让计算机
    发表于 11-01 12:09

    5 月编程语言榜:C 再度暴涨,Scala 成功上位

    TIOBE 刚刚发布了 5 月编程语言排行榜。Scala 经过长时间的沉淀,本月终于进入了 TIOBE 榜单的前 20 名。Scala种 JVM 上运行的函数式编程语言,可与 Java
    发表于 05-08 13:17

    Scala入门到精通——第三十节 Scala脚本编程与结束语

    高级使用使用Scala进行Linux脚本编程结束语1. REPL命令行高级使用在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些些问题,比如中文粘贴会出现乱码、多行代码粘贴
    发表于 06-26 17:44

    Java SE、Java EE、Java ME之间的区别

    本文把JAVA SE、JAVA EE、JAVA ME拿来做下区别,同时也分享下作者的些成果。
    发表于 07-11 08:31

    JAVA SE、JAVA EE和JAVA ME有什么区别

    本文把JAVA SE、JAVA EE、JAVAME拿来做下区别,同时也分享下作者的些成果。目前的Ja
    发表于 07-15 07:11

    Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?

    的语言(即 Scala API 和 Java API 之间没有区别)是统的;二是对于 unbounded data (无界数据,即流数据) 和 bounded data (有界数据,
    发表于 10-11 16:07

    scala的安装步骤

    Scala基础学习】:初识scala—001
    发表于 03-05 13:46

    了解BLDC与PMSM的区别

    参考文件:了解BLDC与PMSM的区别       BLDC和PMSM电机区别       STM32 FOC BLDC与PMSM的区别
    发表于 08-30 08:38

    C语言与JAVA区别在哪

    、前言C语言属于汇编型语言。是区别于解释型语言的(如JAVA)做个比较编译型语言VS解释型语言总结下:编译型语言是将源代...
    发表于 12-09 08:20

    一张图看懂ERP和MES的区别分析资料下载

    一张图看懂ERP和MES的区别
    发表于 01-04 15:44 14次下载

    scala语言主要应用领域详解

    Scala是一门多范式的编程语言。本文开始介绍了Scala的概念,其次介绍了Scala的特性,最后阐述了scala语言的主要应用领域。
    的头像 发表于 03-07 18:08 1.9w次阅读

    java学习—null和isEmpty 区别

    本文档内容介绍了基于java学习null和isEmpty 区别,供参考
    发表于 03-13 10:26 0次下载

    Scala动手实战入门

    本文档内容介绍了基于Scala动手实战入门,供参考
    发表于 04-13 15:13 8次下载

    简单说明一下Scala语言与其优点

    Scala 是一种有趣的语言,是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行在JVM上,兼容现有的Java程序,集成面向对象编程和函数式编程的各种特性
    发表于 10-10 09:23 6471次阅读

    javaweb和java有什么区别

    Javaweb和Java是两个不同的概念,它们之间存在明显的区别。下面将详细介绍这两者的区别,以满足你关于详尽、详实、细致的要求。 Java是一种广泛应用的编程语言和计算平台,它具有跨
    的头像 发表于 11-16 10:49 1314次阅读