包
包對象
導包
類和對象
方法和構造器
包
Scala 包的三大作用(和 Java 一樣):
- 區分相同名字的類
- 當類很多時,可以很好的管理類
- 控制通路範圍
基本文法
package 包名
Scala 有兩種包的管理風格,一種方式和 Java 的包管理風格相同,每個源檔案一個包(包 名和源檔案所在路徑不要求必須一緻),包名用“.”進行分隔以表示包的層級關系,如 com.pp.scala。另一種風格,通過嵌套的風格表示層級關系。
//使用嵌套風格定義包
package com {
import com.pp.scala.Inner
//在外層包中定義單例對象
object Outer{
//外層包定義變量
var out = "out"
def main(args: Array[String]): Unit = {
//在外層不能直接通路内層 如要通路則需要導包
println(Inner.inner)
}
}
package pp{
package scala{
//在内層包中定義單例對象
object Inner{
//内層包定義變量
var inner = "inner"
def main(args: Array[String]): Unit = {
//内層包中可以直接通路外層包的東西
println(Outer.out)
//可更改外部包的變量
Outer.out = "Inner"
println(Outer.out)
}
}
}
}
}
包對象
在 Scala 中可以為每個包定義一個同名的包對象,定義在包對象中的成員,作為其對 應包下所有 class 和 object 的共享變量,可以被直接通路。
在包 對象中定義共享屬性
在同名包下的Obj檔案中實作通路
導包
- 和 Java 一樣,可以在頂部使用 import 導入,在這個檔案中的所有類都可以使用。
- 局部導入:什麼時候使用,什麼時候導入。在其作用範圍内都可以使用
- 通配符導入:import java.util._
- 給類起名:import java.util.{ArrayList=>JL}
- 導入相同包的多個類:import java.util.{HashSet, ArrayList}
- 屏蔽類:import java.util.{ArrayList =>_,_}
- 導入包的絕對路徑:new _root_.java.util.HashMap
Scala 中的三個預設導入分别是:
- import java.lang._
- import scala._
- import scala.Predef._
類和對象
一般,一個.java 有一個 public 類
注意:Scala 中沒有 public,一個.scala 中可以寫多個類。
Scala 文法中,類并不聲明為 public,所有這些類都具有公有可見性(即預設就是 public)
object cll {
def main(args: Array[String]): Unit = {
//建立對象測試
var stu = new student()
println(stu.getName)
println(stu.getAge)
}
}
//定義一個類
class student {
//實作JavaBean的方法則要聲明注解
//如果要定義成私有的則可加上private修飾符
private val aa : String = "定義私有屬性"
@BeanProperty
//定義屬性
val name: String = "aaa"
@BeanProperty
val age : Int = 10
}
方法和構造器
方法:
def 方法名(參數清單) [:傳回值類型] = {
方法體
}
構造器:
和 Java 一樣,Scala 構造對象也需要調用構造方法,并且可以有任意多個構造方法。
Scala 類的構造器包括:主構造器和輔助構造器
class 類名(形參清單) { // 主構造器
// 類體
def this(形參清單) { // 輔助構造器
}
def this(形參清單) { //輔助構造器可以有多個...
}
}
- 輔助構造器,函數的名稱 this,可以有多個,編譯器通過參數的個數及類型來區分。
- 輔助構造方法不能直接建構對象,必須直接或者間接調用主構造方法。
- 構造器調用其他另外的構造器,要求被調用構造器必須提前聲明。
object gou {
def main(args: Array[String]): Unit = {
//建立對象
val s1 = new Student
println(s1.name)
//傳參建立對象
val s2 = new Student("b",20)
}
}
//定義一個類
class Student(){
//定義屬性
var name : String = "a"
var age : Int = 1
println("主構造方法被調用")
//聲明輔助構造方法
def this(name : String){
this() //直接調用主構造器
println("輔助造方法1被調用")
this.name = name
println(s"$name $age")
}
def this(name : String , age : Int){
//方法重載
this(name)
println("輔助造方法2被調用")
this.age = age
println(s"$name $age")
}
}
構造器參數:
Scala 類的主構造器函數的形參包括三種類型:未用任何修飾、var 修飾、val 修飾
- 未用任何修飾符修飾,這個參數就是一個局部變量
-
object gou { def main(args: Array[String]): Unit = { val student2 : Student2 = new Student2("cc",20) //調用方法 student2.Printt() } } //定義一個類 //主構造器無修飾 class Student2(name : String,age : Int){ //相當于已定義屬性 def Printt(): Unit ={ println(name) println(age) } }
- var 修飾參數,作為類的成員屬性使用,可以修改
-
object gou { def main(args: Array[String]): Unit = { val s : Student1 = new Student1("name",12) println(s.age) println(s.name) } } //定義一個類 class Student1(var name : String,var age : Int){ //相當于已定義屬性 }
- val 修飾參數,作為類隻讀屬性使用,不能修改