包
回顾Java包的三大作用
- 区分相同名称的类
- 当类很多时可以很好的管理类
- 控制访问范围
Java打包命令
package com.sky.test
打包的本质分析
实际上就是创建不同的文件夹来保存类文件
Scala包的基本介绍
和Java一样,Scala中管理项目可以使用包,但,Scala中包的功能更加强大,使用也更加复杂些
基本语法
package 包名
Scala包的作用(与Java的差不多)
- 区分相同名称的类
- 当类很多时可以很好的管理类
- 控制访问范围
- 可以对类的功能进行拓展
Scala中包名和源码所在的系统文件目录可以不一致,但是编译后的字节码路径和包名会保持一致(这个工作由编译器完成)
Scala包的命名规范
- 只能包含数字、字母、下划线、小圆点.,但不能用数字开头,也不要使用关键字。
- demo.class.exec1 //错误,因为class是关键字
- demo.12a/错误,因为不能以数字开头命名规范:
命名规则
- 一般是小写字母+小圆点
- 一般是com.公司名.项目名.业务模块名
Scala会自动引入常用包
- java.lang.*
- scala包
- Predef预定义包
使用包的注意事项
- 在包中不能写方法,或者定义变量⇒使用包对象来解决
包对象
- package object scala 表示创建一个包对象Scala 它对应包名为scala这个包下的包对象
- 每一个包都可以有一个包对象
- 包对象的名字需要和子包一样
- 在包对象中可以定义变量,方法
- 在包对象中定义的变量和方法,都可以在对应的包中使用
- 在底层这个包对象会生成两个.class文件 1. package.classs 和 package$.class
包对象的注意事项
- 每个包都可以有一个包对象。你需要在父包中定义它
- 包对象的名称需要和包名一致,一般用来对包的功能补充
包的可见性
当一个文件中出现了 class AAA 和 object AAA
- class AAA称为伴生类
- object AAA的伴生对象
- 因为Scala的设计者将static拿掉,他就设计了伴生类和伴生对象的概念
- 伴生类写非静态的内容伴生对象就是静态内容
Scala中包的可见性和访问修饰符的使用
- 当属性访问权限为默认时,从底层看属性是private的,但是因为提供了
Xxx_$eq()[类似setter]/xxx()[类似getter]方法,因此从使用效果看是任何地方都可以访问) - 当方法访问权限为默认时,默认为public访问权限
- private为私有权限,只在类的内部和伴生对象中可用
- protected为受保护权限,scala中受保护权限比Java中更严格,只能子类访问,同包无法访问
- 在scala中没有public关键字,即不能用public显式的修饰属性和方法
- 包访问权限表示属性有了限制,同时包也有了限制,这点和Java不一样,体现出Scala包使用的灵活性
包的引入
- Scala引入包也是使用import,基本的原理和机制和Java一样,但是Scala中的import功能更加强大,也更灵活。
- 因为Scala语言源自于Java,所以java.lang包中的类会自动引入到当前环境中,而Scala中的scala包和Predef包的类也会自动引入到当前环境中,即起其下面的类可以直接使用。
- 如果想要把其他包中的类引入到当前环境中,需要使用import语言
包的引入细节
- 在Scala中,import语句可以出现在任何地方,并不仅限于文件顶部,import语句的作用一直延伸到包含该语句的块末尾。这种语法的好处是:在需要时在引入包,缩小import包的作用范围,揭高效率。
- Java中如果想要导入包中所有的类,可以通过通配符*,Scala中采用下 _
- 如果不想要某个包全部的类,而是其中几个类,可以采取选取器(大括号) 例如 import scala.collection.mutable.{HashTable,HashSet}
- 如果引入的多个包中含有相同的类,那么可以将不需要的类进行重命名进行区分,这个就是重命名
- 如果某个冲突的类根本就不会用到,那么这个类可以直接隐藏掉
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ryder!
评论






