Scala | package 包

26 阅读3分钟

一、包的概念

[问]   类文件特别多时,如何去组织?

[答]  Scala中的包可以定义在文件的开头,也可以在代码的任意位置。

作用: 区分同名的类; 类很多时,更好地管理类;控制访问范围;

二、包的基本使用

基本步骤:创建包 → 创建对象(类) → 导入类

示例:

1. 创建包。右键,新建软件包。名称小写。
2. 在包上右键,新建类
3. 在测试文件中引入类,使用。

路径:jh/TestStudent

package jh

// 导入jh下的com下的Student类
import jh.com.Student

object TestStudent {
  def main(args: Array[String]): Unit = {
    val stu = new Student("小花")
    stu.sayHello()
  }

}

路径:jh/com/Student

package jh.com

class Student(var name:String) {
  def sayHello():Unit = {
    println(s"${name}")
  }

}

三、包的定义格式

  • 定义格式1: package 包名
  • 定义格式2: package 包名 {}
  • 定义格式3: package 包名{ package 包名  }

一个惯例是将包命名为与包含 Scala 文件的目录名相同。

包名称应全部为小写,只能包含数字,字母,下划线,小圆点。不能使用数字开头,也不要用关键字

四、导入包----import

别的文件中的类,对象,特质.....

同一个包下面的文件,相互之间不重要import

1.同时导入多个类:import 包.{类1,类2}

import jhart.com.model.Student import jhart.com.model.Teacher

2.同时导入包下的所有的类

import jhart.com.model._

3.导入类之后,重命名

import jhart.com.model.{Student => Stu}

【问】: 是否用过import ?

Scala的导入语法:在Scala中显式导入包使用import关键字。

  • (1)import 包名  导入这个包下的顶层对象
  • (2)通配符导入: import 包名._ 导入这个包下所有的类
  • (3)import 包名.类名 导入这个包下的具体的类
  • (4)导入相同包的多个类:import java.util.{HashSet, ArrayList }
  • (5)导入成员重命名。如果在一个类中需要导入不同包中的成员且成员名相同,可以通过导入成员重命名的方式区分不同包中的成员,其语法格式为:

       import java.util.{ArrayList=>JL} 表示把util包中的ArrayList类重命名为JL。

  • (6)局部导入:什么时候用,什么时候import。在其作用范围内部都可以使用。
  • (7)导入成员隐藏类。如果一个包中包含多个类,除包中某一个类之外都需要导入,可以使用导入成员隐藏类的方法,其语法格式为:把包中的A不导入。import 包.{A=>_ , _}
package jhart.com

// 导入
// 别的文件中的类,对象,特质.....
// 同一个包下面的文件,相互之间不重要import

// 1.同时导入多个类:import 包.{类1,类2}
// import jhart.com.model.Student
// import jhart.com.model.Teacher

// 2.同时导入包下的所有的类
import jhart.com.model._

// 3.导入类之后,重命名
import jhart.com.model.{Student => Stu}

object Test {

  class Student() {
    println("Student")
  }

  def main(args: Array[String]): Unit = {
    // 不重要import,因为Student和当前测试文件在同一包下面
    new Stu()
    new Student()
    new Teacher()
  }
}
package jhart.com.model

class Student {
  println("jhart.com.model.Student")
}

五、定义包对象

包对象是通过将其置于包的定义内部来创建的。

例如,假设我们有一个包 com.example,我们可以在该包中创建一个包对象。

[格式]package object 包名 {}

代码:

package jhart.com

// 在包对象中定义的成员,可以被同一个包下的任何代码所直接访问,不需要导入
package object model {
  val greeting:String = "hello package model"

}

代码:

package jhart.com.model

import jhart.com.model

class Student {
  println("jhart.com.model.Student")
  println(model.greeting)

}