如同java中,如果要運行一個程序,必須編寫一個包含main方法類一樣;在scala中,如果要運 行一個應用程序,必須有一個main方法,作為入口;
scala中的main方法定義為def main(args: Array[String]),而且必須定義在object中。
如果要運行上述代碼,需要將其放入.scala文件,然後先使用scalac編譯,再用scala執行
面向對象:
object
對象,為了解決scala中class中不能存在static關鍵字的問題:直白講,object對象在jvm中只存在一份,object中所有屬性和方法都是靜態的,類似java中的static修飾
寫一個簡單的類
調用
在Java和Scala中,管理項目可以使用包結構,C和C#使用命名空間。
對於package
可以創建下面的形式
等同於下面的形式
還可以寫成下面的形式
在test和test.pkg和test.pkg.wzy包下面分別建類
Test包下面
test.pkg包下面
test.pkg.wzy下面
在test.pkg.wzy.pkgtest新建一個允許Object
這種形式裡test.pkg的成員在這裡不可見,pkgtest包在test.pkg.wzy中,只能對wzy包有訪問權限,不能訪問上一層,包是沒有繼承關係的,但是位於文件頂部不帶花括號的包聲明在整個文件範圍內有效
作用域:可以放到屬性、方法、class、object、trait上,定義的時候,放在對應的關鍵字之前即可
public:默認,不需要寫出來
protected:和Java一樣,但Scala不推薦使用
private:和java功能一模一樣,class是私有訪問,只能在當前的class中進行訪問
private[this/class名稱/包名稱] : 在private的基礎上做了一個限制,
this:表示只有當前對象可用
class的構造函數:主構造函數、輔助構造函數
主構造函數
1.默認有一個無參數的主構造函數
2.主構造函數位於class名稱後的一個定義(就是函數的參數輸入列表)+ 函數體內可執行的所有代碼
調用
主構造函數可以加參數,主構造函數中定義的輸入參數,最終是作為class的屬性存在,並且修飾符為public val;可以將其修改為其他修飾符
參數可以給定默認值
輔助構造函數(可以寫多個輔助構造函數)
1.以this為函數名稱的函數就叫做輔助構造函數
2.輔助構造函數不能有返回值
3.輔助構造函數的第一行必須調用主構造函數或者定義在他之前的輔助構造函數
注意:主構造函數和輔助構造函數的參數不能一樣
對象構建初始化的過程:基本和java一樣
var p : Person = new Person("小倩",20)
1) 加載類的信息(屬性信息,方法信息)
2) 在內存中(堆)開闢空間
3) 使用父類的構造器(主和輔助)進行初始
4) 使用主構造器對屬性進行初始化 [age:90, name null]
5) 使用輔助構造器對屬性進行初始化 [age:20, name小倩]
6) 將開闢的對象的地址賦給 p 這個引用
伴生對象和伴生類
定義:如果在一個Scala文件中,分別存在一個class和一個object,而且class和object的名稱完全一樣,那麼這個class為object的伴生類,object為class的伴生對象
作用:伴生類和伴生對象之間可以互相訪問私有屬性或者方法
運行下
apply方法
定義在object中表示提供一種快捷的對象創建方式,創建的對象就是apply方法返回的數據類型
創建對象的調用方式就是object名稱+apply函數的參數列表
返回對象
運行下
Class和Object都有一個apply看調用是調用Object
調用
定義在class中,表示提供一種快捷的數據獲取方式,類似list集合數據獲取方式 eg:list(0)
比如這個
獲取的方式
update方法
只能定義在class中,表示提供一種便捷的數據更新/插入的方法,類似數組的更新eg:arr(0) = 100 ,
update函數中參數至少兩個,參數列表的最後一個參數在調用的時候寫在等號後面,其他寫在等號前面
創建類
調用結果
閱讀更多 分享電腦學習 的文章