scala简介
scala是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃java这个强大的平台,它运行在java虚拟机(javavirtualmachine)之上,轻松实现和丰富的java类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。scala就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。
java简介
java是一门面向对象编程语言,不仅吸收了c++语言的各种优点,还摒弃了c++里难以理解的多继承、指针等概念,因此java语言具有功能强大和简单易用两个特征。java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
java具有简单性、面向对象、分布式、健壮性、安全性、平***立与可移植性、多线程、动态性等特点。java可以编写桌面应用程序、web应用程序、分布式系统和嵌入式系统应用程序等。
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很容易的斜街很多时候弥补了这一点)
TD-SCDMA海外市场的三大机会
罗永浩:电子二手烟危害只是小,并不是没有
接入网技术与业务的发展趋势
小米6什么时候上市?最新消息:米粉节卖了13.6亿,为小米6创造了市场!
开口式和闭口式霍尔电流传感器的区别及优缺点
一文看懂scala和java的区别
智哪儿观察:苹果的智能家居为什么没做起来?
有源滤波器电路图
DRAM灾难未停,没有人会是赢家
用于视觉交流工具的内饰氛围灯MeLiBu
晶体管兆欧表的工作原理
松下教你如何巧用数码变焦功能
如何解决注塑机导轨腐蚀问题
电压继电器和电流继电器的作用和区别
玻璃盖板要如何实现呢?
AP2400 LED汽车大灯雾灯专用恒流驱动IC
华为智慧屏体验 绝对是IoT时代下的产物
重载连接器随工业4.0升级,小型模块化打开更多应用空间
如何实现自由口模式下PLC与计算机的通信方法概述
非常适合在关节型机器人产品使用的舵机原理和实现