zoukankan      html  css  js  c++  java
  • Scala 基础(4)—— 类和对象

    1. 类、字段和方法

    Scala 用 class 关键字定义类,一旦定义好一个类,就可以使用 new 关键字创建对象。

    Scala 使用 new 调用无参构造器时,可以不使用 (),推荐不使用括号:

    class MyClass {
      // MyClass 的定义
    }
    
    val a = new MyClass
    

    在类的定义中,可以填入字段(field)和方法(method),两者统称为成员(member)。

    字段保留了对象的状态,即数据。

    方法使用数据执行计算。

    使用 var 或者 val 定义字段,使用 def 定义方法。

    为了控制外部对于对象的字段和方法的访问,可以给这些加上访问控制符(private 和 protected),访问控制符的用法在后面的章节细讲。

    Scala 的方法和 Java 的方法,有一个显著的区别,就是方法的入参默认都是 val 类型的。

    所以这样的调用是非法的:

    def add(b: Byte): Unit = {
      b = 1 // 不能编译
    }
    

    Java 强制 java 文件和公有类采用统一名字,Scala 没有强制这一点,但是仍然推荐和 Java 的相同风格。

    2. 单例对象

    Scala 没有 static 关键字,在 class 里面定义的字段方法都是对象持有的,也就是实例成员。

    Scala 有另外办法去实现静态成员,就是 object 关键字,我们称这种用 object 关键字定义的为单例对象(singleton object)。

    object MyClass {
      // 这里定义静态字段 和 静态方法
    }
    

    当单例对象和某一个类共享同一个名字,称这个单例对象是这个类的伴生对象(companion object)。同时类又叫这个单例对象的伴生类(companion class)。

    必须在同一个文件中定义类和类的伴生对象。

    类和它的伴生对象可以互相访问私有成员。

    没有同名伴生类的单例对象被称为孤立对象(standalone object),常用于工具方法。

    类和单例对象有一个区别,就是单例对象不接受参数。

    单例对象只有在首次被代码访问的时候才初始化。

    3. 对象相等性

    我们都知道,Java 在判断两个对象是否相等时有2个语义:

    引用相等:== 操作符

    值相等:Object 类的 equals() 方法

    而 Scala 在这一方面和 Java 不同

    值相等:== 操作符

    引用相等:Any 类(所有 Scala 类的超类)的 eq 方法,ne 方法(与 eq 方法结果相反)

      def main(args: Array[String]): Unit = {
        val s = "Hello World!"
        val s1 = "Hello"
        val s2 = " World!"
        println(s == s1 + s2) // true
        println(s eq s1 + s2) // false
        println(s ne s1 + s2) // true
      }

    Scala 有一个优势在于,无论是使用 == 操作符,还是 eq 或是 ne 方法,不需要担心左侧为 null 时抛出异常。

  • 相关阅读:
    Git的一些概念(二)
    Git安装(一)
    版本控制工具
    jenkins+maven+svn实现springboot项目的自动化部署过程
    jenkins+maven+svn 持续集成环境搭建
    安装Tomcat
    安装JDK
    JavaEE 项目部署方式
    持续部署、持续集成、持续交付的概念
    Linux下Maven安装(十二)
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/10247503.html
Copyright © 2011-2022 走看看