scala关键字
发布日期:2021-09-10 01:39:53 浏览次数:30 分类:技术文章

本文共 2969 字,大约阅读时间需要 9 分钟。

hot3.png

Java关键字

Java一共有50个关键字(keywords),其中有2个是保留字,目前还不曾用到:goto和const。true、false和null看起来很像关键字,但实际上只是字面量而已。本文粗略的把true、false和null也看做Java关键字,认为Java一共有53个关键字。下面是大致归类的Java关键字列表:

  • assert
  • boolean, byte, short, char, int, long, float, double, void
  • package, import, class, interface, enum, implements, extends
  • public, protected, private, abstract, static, final, volatile, transient, synchronized, strictfp, native
  • try, catch, finally, throw, throws
  • if, else, do, while, for, switch, case, default, break, continue, return
  • super, this
  • new, instanceof
  • const, goto
  • true, false, null

Scala关键字

Scala只有39个关键字:

  • package, import, class, object, trait, extends, with, type, forSome
  • private, protected, abstract, sealed, final, implicit, lazy, override
  • try, catch, finally, throw
  • if, else, match, case, do, while, for, return, yield
  • def, val, var 
  • this, super
  • new
  • true, false, null

对比Java和Scala关键字

为了直观的对比Java和Scala的关键字列表,我画了下面这张图:

Java和Scala共有的关键字

Java和Scala共有的关键字,在两个语言里的含义也基本相同。只有一个例外:case。在Java里,case主要用在switch-case语句里。Scala没有switch-case语句,case关键字主要用来定义和进行模式匹配。

只有Java才用到的关键字

共有28个Java关键字没有被Scala采用,但Scala也是要运行在JVM上的,所以下面来看一下这28个关键字所表达的含义是如何在Scala里实现的。

assert

scala.Predef定义了assert()方法,如下所示:

object Predef {    @elidable(ASSERTION)    def assert(assertion: Boolean) {        if (!assertion)            throw new java.lang.AssertionError("assertion failed")    }    @elidable(ASSERTION) @inline    final def assert(assertion: Boolean, message: => Any) {        if (!assertion)            throw new java.lang.AssertionError("assertion failed: "+ message)    }}

boolean, byte, char, short, int, long, float, double

Scala没有primitive类型,取而代之的是相应的类:Boolean、Byte、Char、Short、Int、Long、Float和Double。具体请看。

void

和primitive类型类似,Scala使用了更加OO的方式来表达void:Unit类。具体请看。

interface和implements

Scala用Trait取代了接口,具体请看。

static

Scala没有static概念,取而代之的是单例对象。具体请看。

public

在Scala里,类、方法、字段等,默认就是public,而且Scala也不允许将它们显式设置为public,所以public这个单词没有任何特殊含义,可以自由使用。

const和goto

const和goto不再是保留字,可以自由使用。

throws

Scala抛弃了Checked Exception,以及throws关键字。

native、transient、volatile和strictfp

取代这4个关键字的,是4个注解:scala.native、scala.transient、scala.volatile和scala.annotation.strictfp。下面是示例代码:

@transient var t = 1@volatile var v = 1@strictfpdef f() = {}@nativedef n(x: Int): Int;

synchronized

Scala提供了synchronized方法,用起来几乎和Java的synchronized关键字一样:

def sync() = {    this.synchronized {        val x = 2    }}

但实际上并没有什么synchronized方法,反编译之后,上面的Scala代码和下面的Java代码一模一样:

public void sync() {    synchronized(this) {        ...    }}

instanceof

取而代之的是isInstanceOf[]方法,代码如下所示:

def instanceof(arg: Any) = {    if (arg.isInstanceOf[String]) {        val str = arg.asInstanceOf[String]    }}

enum

在Scala里,如果想定义枚举,应该继承scala.Enumeration,比如下面这段代码:

object Color extends Enumeration {    val Red = Value    val Green = Value    val Blue = Value}

break, continue, default, switch

如前所述,Scala用模式匹配取代了switch-case,从而解放了switch和default关键字。而Scala的for循环和Java的for循环也大相径庭。Scala虽然有while和do-while循环,但是里面不能用break和continue,所以这两个关键字也解放了。

转载于:https://my.oschina.net/u/2000675/blog/1802616

转载地址:https://blog.csdn.net/weixin_34367845/article/details/92169783 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:运维的shell小编(1)
下一篇:ManActivity改

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月14日 06时55分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

matlab变形监测,基于matlab的变形监测数据处理与分析_毕业设计论文 2019-04-21
opencv matlab编程,在Matlab中调用OpenCV函数 | 学步园 2019-04-21
c语言文件wt,c语言,wt和rt中的t是什么意思 2019-04-21
c语言运行几进制,【C语言】求已知等式在几进制条件下成立 2019-04-21
电梯运行仿真c语言代码,电梯调度算法模拟(示例代码) 2019-04-21
android组件动态接收数据库,Android开发——fragment中数据传递与刷新UI(更改控件)... 2019-04-21
云麦小米华为体脂秤怎么样_云康宝和华为智能体脂秤对比评测,实际体验告诉你哪款更好... 2019-04-21
linux 条件判断 取非_Linux awk 系列文章之 awk 多重条件判断 2019-04-21
c语言中如何将字符串的元素一个一个取出_C语言中常用的字符串操作函数 2019-04-21
2d游戏地图编辑器_王者荣耀:新版本爆料!地图编辑器“天工”即将开测,游戏怎么玩由你定!... 2019-04-21
.net framework服务启动后停止_dos命令net图文教程,start启动系统服务stop停止服务批处理脚本... 2019-04-21
8k分辨率需要多大带宽_超乎想象!用RTX3080显卡连索尼8K电视玩游戏感受如何?... 2019-04-21
win10怎么开启aptx_Win10未来的黑科技?微软SurfaceFleet大曝光 2019-04-21
creo视图管理器使用方法_学以致用之中望3D—浅谈使用中望3D的初步感受 2019-04-21
周育如的音标口诀大全_花鸟画口诀大全,实用! 2019-04-21
心电图计算心率公式_医学常用的计算公式口诀(内外妇儿),赶快收藏! 2019-04-21
select 移动端 第一个无法选中_Python爬虫微博(移动端)评论 2019-04-21
华为云welink成像是反的_华为发布智能办公神器WeLink,可连接会议室开会,还可一键遥控报销和智能翻译... 2019-04-21
唱好铁血丹心谐音正规_趙贤典:打好“感情牌” 唱好“大合唱” 2019-04-21
aix系统vi修改命令_Linux基础知识必备:利用vi编辑器创建和编辑正文文件 2019-04-21