1. 程式人生 > >scala學習02-類與對象,類型與操作

scala學習02-類與對象,類型與操作

calculate bool 手動 精確 args () 字面量 run 前綴和

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-類與對象,類型與操作