回顾Java包的三大作用

  1. 区分相同名称的类
  2. 当类很多时可以很好的管理类
  3. 控制访问范围

Java打包命令

package com.sky.test

打包的本质分析

实际上就是创建不同的文件夹来保存类文件

Scala包的基本介绍

和Java一样,Scala中管理项目可以使用包,但,Scala中包的功能更加强大,使用也更加复杂些

基本语法

package 包名

Scala包的作用(与Java的差不多)

  1. 区分相同名称的类
  2. 当类很多时可以很好的管理类
  3. 控制访问范围
  4. 可以对类的功能进行拓展

Scala中包名和源码所在的系统文件目录可以不一致,但是编译后的字节码路径和包名会保持一致(这个工作由编译器完成)

Scala包的命名规范

  • 只能包含数字、字母、下划线、小圆点.,但不能用数字开头,也不要使用关键字。
    • demo.class.exec1 //错误,因为class是关键字
    • demo.12a/错误,因为不能以数字开头命名规范:

命名规则

  • 一般是小写字母+小圆点
  • 一般是com.公司名.项目名.业务模块名

Scala会自动引入常用包

  1. java.lang.*
  2. scala包
  3. Predef预定义包

使用包的注意事项

  1. 在包中不能写方法,或者定义变量⇒使用包对象来解决

包对象

  • package object scala 表示创建一个包对象Scala 它对应包名为scala这个包下的包对象
  • 每一个包都可以有一个包对象
  • 包对象的名字需要和子包一样
  • 在包对象中可以定义变量,方法
  • 在包对象中定义的变量和方法,都可以在对应的包中使用
  • 在底层这个包对象会生成两个.class文件 1. package.classs 和 package$.class

包对象的注意事项

  • 每个包都可以有一个包对象。你需要在父包中定义它
  • 包对象的名称需要和包名一致,一般用来对包的功能补充

包的可见性

当一个文件中出现了 class AAA 和 object AAA

  1. class AAA称为伴生类
  2. object AAA的伴生对象
  3. 因为Scala的设计者将static拿掉,他就设计了伴生类和伴生对象的概念
  4. 伴生类写非静态的内容伴生对象就是静态内容

Scala中包的可见性和访问修饰符的使用

  • 当属性访问权限为默认时,从底层看属性是private的,但是因为提供了
    Xxx_$eq()[类似setter]/xxx()[类似getter]方法,因此从使用效果看是任何地方都可以访问)
  • 当方法访问权限为默认时,默认为public访问权限
  • private为私有权限,只在类的内部和伴生对象中可用
  • protected为受保护权限,scala中受保护权限比Java中更严格,只能子类访问,同包无法访问
  • 在scala中没有public关键字,即不能用public显式的修饰属性和方法
  • 包访问权限表示属性有了限制,同时包也有了限制,这点和Java不一样,体现出Scala包使用的灵活性

包的引入

  1. Scala引入包也是使用import,基本的原理和机制和Java一样,但是Scala中的import功能更加强大,也更灵活。
  2. 因为Scala语言源自于Java,所以java.lang包中的类会自动引入到当前环境中,而Scala中的scala包和Predef包的类也会自动引入到当前环境中,即起其下面的类可以直接使用。
  3. 如果想要把其他包中的类引入到当前环境中,需要使用import语言

包的引入细节

  1. 在Scala中,import语句可以出现在任何地方,并不仅限于文件顶部,import语句的作用一直延伸到包含该语句的块末尾。这种语法的好处是:在需要时在引入包,缩小import包的作用范围,揭高效率。
  2. Java中如果想要导入包中所有的类,可以通过通配符*,Scala中采用下 _
  3. 如果不想要某个包全部的类,而是其中几个类,可以采取选取器(大括号) 例如 import scala.collection.mutable.{HashTable,HashSet}
  4. 如果引入的多个包中含有相同的类,那么可以将不需要的类进行重命名进行区分,这个就是重命名
  5. 如果某个冲突的类根本就不会用到,那么这个类可以直接隐藏掉