scala学习02-类与对象,类型与操作

Posted jiayupeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala学习02-类与对象,类型与操作相关的知识,希望对你有一定的参考价值。

Scala类与对象,类型与操作

类的声明

class MyClass{
    
    private var num = 0 // 如果想要不对外开放,使用private,如果不写,默认就是public
    
    //方法
    //花括号前没有=号,这种情况下,返回值类型一定是Unit,也就是空,所以如果想有返回值,一定要加=号
    def add(b:Byte){
        num += b
    }
    //如果计算表达式只有一行,可以省略掉花括号
    def add1(b:Byte):Unit = num += b
    
    //有返回值的正常方法:
    def checkSum(): Int = ~(num & OxFF) + 1
}

Singleton对象

普通类中不能定义静态成员,要定义静态成员,就定义在一个单例类中

//定义位置:如果与普通类的名字一样,那么成为普通类的伴生对象,要定义在同一个源文件中
//类和伴生对象可以互相访问其私有成员
object MyClass{
    
    //类中的成员和普通类一样
    def calculate(s:String):Int = {
        //TODO...
    }
}

//类似于java中的静态方法工具类
//使用方式也是类名点方法名
MyClass.calculate("a")

Scala程序运行

需要一个main函数

//在单例对象中定义main函数
object Summer{
    def main(args:Array[String]){
    //TODO..
    }  
}

需要编译执行

编译:
scalac MyClass.scala Summer.scala 
执行:
scala Summer of love

Application特质

让单例对象继承Application,然后把要写在main函数里面的函数体,直接写在花括号中,不用写main了,因为Application已经提供了

object Summer extends Application{
    
    //TODO..
    for(season <- List("fall","winter","spring"))
        println(season)
    
}

基本类型

包括String和值类型。

值类型包括:

  • Byte
  • Short
  • Int
  • Long
  • Char
  • String
  • Float
  • Double
  • Boolean

String 在java.lang包下

其他值类型在scala包下

可以直接用字面量,也就是,直接使用具体的值,而不需要使用引用。

符号字面量

//语法: ‘symbol
val a = ‘hello
a: Symbol = ‘hello
//例如方法:
def updateRecordByName(r:Symbol,value Any){
    //TODO..
}

操作符和方法

+-*/ 这些符号其实都是方法名。

以上的几个是中缀操作符

//例如:
val a = 3 + 5 // +号是中缀操作符,实际上是 3.+(5)
val b = "hello"
val c = b indexOf ‘o‘//这个indexOf也是中缀操作符,实际上是 b.indexOf(‘o‘)

任何方法都可以是操作符

除了中缀操作符,还有前缀和后缀操作符

//前缀操作符只有 + - ! ~ 四种
val a = -3.0 //前缀操作符,实际上Scala调用了(3.0).unary_-  ,就是给操作符加上“unary_”的前缀
//如果给类定义了 unary_*方法,也不能使用*p

//后缀操作符,就是不用点和括号调用的不带参数的方法,比如:
val s = "Hello"
val s1 = s toLowerCase//toLowerCase就成了后缀操作符了

数学运算和关系运算和位运算

与java类似

相等性判断

直接使用 == 或者 !=

因为 == 已经被仔细加工过了,在大多数情况下都可以实现合适的相等性比较

//比较规则是:首先检查左侧是否为null,如果不是,调用左操作数的equals方法。而精确的比较取决于做操作数的equals方法定义。由于有了自动的null检查,因此不需要手动再检查一遍了。
scala> 1 == 1.0
res3: Boolean = true

scala> List(1,2,3) == null
res4: Boolean = false

基本类型有对应的富包装类

富包装类提供了更多的操作,通过隐式转换可以直接使用

基本类型 富包装
Byte scala.runtime.RichByte
Short scala.runtime.RichShort
Int scala.runtime.RichInt
Long scala.runtime.RichLong
Char scala.runtime.RichChar
String scala.runtime.RichString
Float scala.runtime.RichFloat
Double scala.runtime.RichDouble
Boolean scala.runtime.RichBoolean

以上是关于scala学习02-类与对象,类型与操作的主要内容,如果未能解决你的问题,请参考以下文章

Scala入门学习之包类与对象

Scala语言专题

Scala类与对象

Scala的类与类型

Java 学习

Kotlin 学习笔记—— 基本类型函数lambda类与对象的写法