Scala-基础知识

1.var,val和def三个关键字之间的区别?

  1. Scala声明变量有两种方式,一个用val,一个用var。

    val / var 变量名 : 变量类型 = 变量值。

    val定义的值是不可变的,它不是一个常量,是不可变量,或称之为只读变量。

    var 定义变量,val定义不可变量(val是java的final不可变变量,var是java的普通变量),变量和常量类型可以省略不写,自动推断;在main函数里,val和var仅声明变量;在class类定义里,val和var是先声明field存储空间,然后分别为他们定了同名的方法;

    var 变量定义了 同名方法(类似getter) 来获取它的变量值,同时提供了修改变量值的方法(类似于setter)

    var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态是可以改变的

    在应用过程中,尽可能地使用不可变变量。变量类型可以省略,解析器会根据值进行推断。val和var声明变量时都必须初始化。

    用def定义的成员变量,不具备setter和getter方法

    def 定义函数时,每一次重新获得一个函数

    def 函数名(参数名1: 参数类型1, 参数名2: 参数类型2) : 返回类型 = {函数体}

    def 和 val的关系是call-by-name和call-by-value的关系,def对应的是by-name,val对应的是by-value

    其中:call-by-value是在调用函数之前计算;call-by-name是在需要时计算

    还有一个lazy val(惰性val)声明,当需要计算时才使用,避免重复计算

  2. trait(特质)和abstract class(抽象类)的区别?

    trait:

    Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。

    与接口不同的是,它还可以定义属性和方法的实现。

    一般情况下Scala的类可以继承多个Trait,从结果来看是实现了多重继承。Trait(特征) 定义的方式与类类似,但它使用的关键字是 trait。

    特质是一些字段和行为的集合,可以扩展或混入(mixin)类中,通过with关键字,一个类可以扩展多个特质。

    1.优先使用特质。一个类扩展多个特质是很方便的,但却只能扩展一个抽象类。

    2.如果需要构造函数参数,使用抽象类。因为抽象类可以定义带参数的构造函数,而特质不行。

    abstract class:

    抽象类定义了一些方法但没有实现他们。取而代之的是有扩展抽象类的子类定义这些方法。不能创建抽象类的实例。

    在Scala中重写一个非抽象方法必须使用override修饰符。调用超类的方法就如Java一样,使用super关键字。

  3. object和class的区别?

    object:

    Scala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的“半生对象”。

    所以在scala中用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString。对象的构造器在第一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值