• 【Scala专栏】数据类型、变量常量、类和对象


    本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细",抓住主要脉络,加上大量的练习,融会贯通只不过是时间的问题。

    一、数据类型

    在这里插入图片描述
    简记: 所有基础类型基本与Java的包装类等同,唯一有不同的Int(Scala),Integer(Java),注意这个就好

    Unit, Null, Nothing, Any, AnyRef, AnyVal,这几个除了Null乍一眼会有些陌生,不要怕,上总结:

    首先是层级图:
    在这里插入图片描述
    然后是表格:
    在这里插入图片描述
    补丁: 记住Any是所有类型的超类,也就是父类; Nothing是所有类型的子类; Null就是Null; None用在Map类型的value值类型里

    二、变量和常量

    1.定义变量: var a = 10; 或 var a:Int = 10;
    2.定义常量: val a = 10; 或 val a:Int = 10;

    建议: scala的理念是简洁优先,一般不会写出返回类型,不过调试代码时我的习惯还是写出来,可以使用IDE自动生成

    Scala会对每个变量属性自动生成类似Java中的getter/setter方法,对每个常量生成getter方法
    1.变量的getter/setter:
    point为一个我们创建的对象,现在要对他的x属性赋值,以及获取他的x属性

     // setter()
     point.x_=(200)
     // getter()
     println("x = " + point.x)
    
    • 1
    • 2
    • 3
    • 4

    2.常量的getter: 同上
    建议:也可以显示写出来getter/setter方法,相当于自定义方法,可能更符合习惯

    三、类和对象

    谨记:Scala中类还是我们熟悉的class,但是对象object有2个概念,一个是类的引用我们可以称之为类的对象;另一个是object对象,类似Java中的静态工具类,先这么记住,为避免混淆,下文在说对象时一律指Scala中特有的object,类生成的对象后文统一使用类的引用来指代

    3.1 类

    # 很传统的方式, 调用时直接: val person = new Person() 
    或者 val person = new Persion  // 无参构造可以不用写小括号
    class Person {
      val name = "Cry";
      val age = "77";
    }
    
    # 带参数的类定义, 调用时: val person = new Person("Cry",777)
    class Person(xName: String, xAge: Int) {
      val name = xName
      val age = xAge
      var gender = 'm'
    }
    
    #自定义构造方法: 
    class Person(xName: String, xAge: Int) {
      val name = xName
      val age = xAge
      var gender = 'm'
      def this(yName: String, yAge: Int, yGender: Char) {
        this(yName,yAge)
        gender = yGender
      }
       def sayName(): Unit = {
        println("Hello Scala..." + this.name)
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3.2 对象

    object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。

    object Person{
      var name = "Cry"
      def apply(name:String): Unit = {
        println("My name is " + name)
      }
    }
    # 调用: val person = Person("Cry777")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.3 伴生类和伴生对象

    在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

    3.4 Scala的main函数只能写在object里

    可以理解成main函数是静态的,所以推导而出的结论

    object Lesson_ClassAndObj {
    
      def main(args: Array[String]): Unit = {
        val person = new Person("zhangsan", 18)
        val person2 = new Person("lisi", 18, 'f')
        Person("zhaoliu")
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    总结

    1.Scala object相当于java中的工具类, object中定义的全是静态的, object不可以传参,对象要传参,使用apply()方法
    2.Scala中定义变量用var, 自定义常量用val, 变量可变, 常量不可变. 变量和常量类型可以忽略不写,会自动推断
    3.Scala中每行后面都会有分好自动推断机制, 不用显式写出";"
    4.建议在Scala中命名使用驼峰命名法
    5.Scala类中可以传参, 传参一定要指定类型, 有了参数就有了默认的有参构造方法, 类中的属性默认有getter/setter方法
    6.类中重写构造时, 构造中第一行必须先调用默认的构造. def this(…){…}
    7.Scala中档new class时, 类中除了方法不执行【除了构造方法】, 其他语句都执行
    8.在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

    篇幅虽不长,内容也需仔细理解,我们下期再见!

  • 相关阅读:
    机器学习4超参数问题
    uni-app使用uView库的格式化时间API
    MYSQL(索引+SQL优化)
    JavaScript事件之拖拽事件(详解)
    【Java】垃圾回收
    算法训练营day46|动态规划 part08:完全背包 (LeetCode 139. 单词拆分、多重背包理论基础)
    有关python的代码执行顺序以及多线程
    电商项目之如何扣减库存
    Linux 报错:failed to run command ‘java’: No such file or directory
    Spring Bean的作用域有哪些?它的注册方式有几种?
  • 原文地址:https://blog.csdn.net/haohaoxuexiyai/article/details/128083028