Scala构造器的介绍

  1. 和Java一样,Scala构造对象也需要调用构造方法,并且可以有任意多个构造方法(即scala中构造器也支持重载 Scala类的构造器包括:主构造器和辅助构造器

  2. Scala构造器的基本语法

    1
    2
    3
    4
    5
    6
    7
    8
    9

    class 类名(形参列表){// 主构造器
    // 类体
    def this(形参列表){//辅助构造器
    }
    def this(形参列表){//辅助构造器可以有多个...
    }
    }
    [//1.辅助构造器函数的名可以有多个,编译器通过不同参数来区分.

构造器的注意事项和细节

  1. Scala构造器作用是完成对新对象的初始化,构造器没有返回值
  2. 主构造器的声明直接放置于类名之后
  3. 主构造器会执行类定义中的所有语句,这里可以体会到Scala的函数式编程和面向对象编程融合在一起,即:构造器也是方法(函数),传递参数和使用方法和前面的函数部分内容没有区别
  4. 如果主构造器无参数,小括号可省略,构建对象时调用的构造方法的小括号也可以省略
  5. 辅助构造器的名称为this(这个和Java是不一样的),多个辅助构造器通过不同参数列表进行区分,在底层就是f构造器重载
  6. 如果我们想让主构造器变成私有的,可以在()之前加上private,这样用户只能通过辅助构造器来构造对象了
  7. 辅助构造器的生命不能和主构造器声明一致,会发生错误

高级属性

构造器参数

  • Scala的类主构造器的形参未使用任何修饰符,那么这个参数是局部变量
  • 如果参数使用val声明,那么Scala会将这个参数作为类的私有只读属性
  • 如果参数是使用var关键字声明,那么Scala会将参数作为类的成员属性使用,并会提供属性对应的xxx()类似于getter 和 xxx$eq()类似于setter,这时候成员变量是私有的,但可读写

Bean属性

JavaBean$规范定义了Java的属性是像getXxx ()和setXxx ()的方法。许多Java工具(框架)都依赖这个命名习惯。为了Java的互操作性。将Scala字段加@BeanProperty时,这样会自动生成规范的setXxxlgetXxx方法。这时可以使用对象.setXxx()和对象.getXxx()来调用属性。

注意:给某个属性加入@BeanPropetry注解后,会生成getXXx和setXXx的方法并且对原来底层自动生成类似xxx(),xxx_$eq()方法,没有冲突,二者可以共存。

对象创建的流程

  1. 加载类的信息(属性信息,方法信息)
  2. 在内存中(堆)开辟空间
  3. 使用父类的构造器(主和铺助)进行初始
  4. 使用主构造器对属性进行初始化【age:90, naem nul】
  5. 使用辅助构造器对属性进行初始化【age:20, naem小倩】
  6. 将开辟的对象的地址赋给p这个引用