zoukankan      html  css  js  c++  java
  • scala学习笔记——类和对象

    基础语法
    关于Scala程序,这是非常要注意以下几点。

    区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。

    类名 - 对于所有的类名的第一个字母要大写。

    如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。

    示例:class MyFirstScalaClass

    方法名称 - 所有的方法名称的第一个字母用小写。

    如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。

    示例:def myMethodName()

    程序文件名 - 程序文件的名称应该与对象名称完全匹配。

    保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加“.scala”为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译)。

    示例: 假设“HelloWorld”是对象的名称。那么该文件应保存为'HelloWorld.scala“

    def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

    类和对象的一些基础知识

    import scala.collection.mutable.Map
    
    class ChecksumAccumulator {
      val sum_public = 0 //public 是scala的默认访问级别
      private var sum_private = 0 //类私有的
    
      def add(b:Byte): Unit = {
        b = 1 //会报错,scala的方法中的参数都是val类型
        sum_private += b
      }
    
      def add_2(b:Byte){sum_private += b} //与方法add等效
    
      def add_3(b:Byte):Unit = sum_private += b //与方法add和add_3等效
    
      /*
      * 方法f和g返回的都是Unit类型
      * 方法h返回的是String类型
      * */
      def f(): Unit =" this String gets lost "
      def g(){ " this String gets lost too"}
      def h() = { " this String gets lost too"}
    
      def checksum(): Int = {
        /*
        此处的return是多余的,如果没有显示的返回语句,scala方法将返回方法中最后一次计算得到的值
        */
        return ~(sum_private &0xFF) + 1
      }
    
      def chechsum_2(): Int = ~(sum_private &0xFF) + 1 //与方法checksum等效
    }
    
    /*
    scala比java更为面向对象的特点之一是scala不能定义静态成员,而是代之以定义单例对象。除了用object关键字替换了class关键字之外,单例对象的定义看上去与类定义一致
    单例对象与类名称相同,被称为这个类的伴生对象,类被称为单例对象的伴生类
    
    */
    object ChecksumAccumulator{
    
      private val cache = Map[String,Int]()
    
      def calmulate(s:String): Int = {
        if (cache.contains(s))
          cache(s)
        else {
          val acc = new ChecksumAccumulator // acc是ChecksumAccumulator类的一个实例,不是同名的单例对象
          for (c <- s)
            acc.add(c.toByte)
          val cs = acc.checksum()
          cache.+= ((s -> cs))
          cs
        }
      }
    
      def main(args: Array[String]) {
        val acc = new ChecksumAccumulator
        val csa = new ChecksumAccumulator
    
        acc.add(100)
        println(acc.checksum())
        ChecksumAccumulator.calmulate("Every value is an object.") //此处调用的是单例对象,像调用java的静态方法工具类一样调用
        println(acc.sum_private)// sum_private是类私有的,不能直接访问,只能类内访问
        acc.sum_public=3 // 会报错,sum_public是val常量,不是var变量
      }
    }
  • 相关阅读:
    20210131
    20210130
    20210129
    20210128
    20210127
    例3-7
    例3-5
    例3-4
    例3-3
    例3-2
  • 原文地址:https://www.cnblogs.com/suinlove/p/5584040.html
Copyright © 2011-2022 走看看