Scala学习七——包和引入
一.本章要点
- 包也可也可以像内部类那样嵌套
- 包路径不是绝对路径
- 包声明链x.y.z并不自动将中间包x和x.y变成可见
- 位于文件顶部不带花括号的包声明在整个文件范围内有效
- 包对象可以持有函数和变量
- 引入语句可以引入包、类和对象
- 引入语句可以出现在任何位置
- 引入语句可以重命名和隐藏特定成员
- java.lang、scala和Predef总是被引入
二.包
Scala中的包和Java/C++中的包都是一样的,用来管理大型程序中的名称。
可以用完全限定的名称来防止冲突(scala.collection.immutable和scala.collection.mutable),也可以用引入语句来提供一个更短小的别名。
要增加条目到包中,可以将其包含在包语句当中(注:源文件目录和包之间并没有强制的关联关系,可以在一个文件中写多个):
package com{
package horstmann{
package{
class Employee{
}}
}
}
三.作用域规则
Scala的包支持嵌套,可以访问上层作用域中的名称:

问题:

这种情况在Java中不会发生,因为包名是绝对的。但在Scala中包名是相对的(可以使用绝对包名解决,以_root_开始[val s=new _root_.scala.collection.mutable.ArrayBuffer[...]],也可以使用串联式。)
四.串联式包语句
包语句可以包含一个”串“,或者说路径区段,如:

五.文件顶部标记法
文件顶部使用package语句:
package com.horstman.impatient
package people //所有内容属于com.hortman.impatient.people,但com.horstman.impatient包中的内容可见,可以直接引用
class Person
... //相当于
package com.horstman.impatient{
package people{
class Person
... } }
六.包对象
包可以包含类,对象,特质,但不能包含函数或变量的定义(Java虚拟机的局限)。
每个包可以有一个包对象,需要在父包中定义它,且名称和子包一样,例:
package com.horstman.impatient
package object people{
val defaultName="xxx"
}
package people{
class Person{
var name=defaultName //从包对象拿到常量
}
}
在同一个包中使用包对象字段不需要加限定词,在其他地方可以用com.horstman.impatient.people.defaultName访问(包对象被编译成带有静态方法和字段的JVM类)。
七.包可见性
在Scala中可以用private[类名/包名]限制属可见位置(像Java中没有修饰符的类成员在包含该类的包中可见)。
package com.people
class Person{
private[Person] def ...//只在该类实例化对象中可见
} //上层包可见
private[com] def ....
八.引入
通过引入语句使用更短的名称。(import xxx.xxx.xxx,_相当于Java中的通配符)
九.任何地方都可以声明引入
在Scala中,引入语句可以出现在任何地方,并不仅限于文件顶部(如在块中引入,作用效果一直延升到块末尾)
十.重命名和隐藏方法
- 可以使用选取器引({})入包中的几个成员(import java.awr.{Color,Font});
- 选取器允许重命名成员(import jva.util.{HashMap=>javaHashMap});
- HashMap=>_表示隐藏某个成员而不是重命名,一般用来引入其他成员(import java.util.{HashMap=>_,_})
十一.隐式引入
每个Scala程序都隐式引入如下:
//和Java一样,java.lang总是被引入
//允许覆盖之前的引入,如scala.StringBuilder会覆盖java.lang.StringBuilder
import java.lang._
import scala._
//Predef包含了很多有用函数,在Scala还没有加入包对象之前就已经存在了
import Predef._
十二.练习


Scala学习七——包和引入的更多相关文章
- Scala学习(七)---包和引入
包和引入 摘要: 在本篇中,你将会了解到Scala中的包和引入语句是如何工作的.相比Java不论是包还是引入都更加符合常规,也更灵活一些.本篇的要点包括: 1. 包也可以像内部类那样嵌套 2. 包路径 ...
- Scala学习(七)练习
控制结构和函数 1. 编写示例程序,展示为什么 package com.horstmann.impatient 不同于 package com package horstmann package im ...
- Scala学习-02-方法
算数和操作符重载 所有的操作符都是方法. a + b 是一种缩写形式 : a .+ b “+”是方法名(操作符重载) ++和—— Scala中并没有“++”和“——”.需要使用“+=”和“-=” ...
- 快学scala-第七章 包和引入
知识点: 1. Scala.Java.C++的包的目的都是为了管理大型程序中的名称.与对象或类的定义不同,同一个包可以定义在多个文件当中.或者在同一个文件中,为多个包贡献内容. 2. Scala的包和 ...
- Scala学习(九)---文件和正则表达式
文件和正则表达式 摘要: 在本篇中,你将学习如何执行常用的文件处理任务,比如从文件中读取所有行或单词,或者读取包含数字的文件等.本篇的要点包括: 1. Source.fromFile(...).get ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- Scala学习——基础篇
[<快学Scala>笔记] 一.基础 1.变量val 标志符: 声明常量: 如,val answer = 1var 标志符:声明变量: 类型推断:变量的类型由scala根据初始化变量的表达 ...
- Scala学习笔记(一)数据类型
.类型参数化数组 val arrayString = Array[String](2); arrayString (0)="Hello"; arrayString (1)=&quo ...
- MyBatis学习七:spring和MyBatis整合
<\mybatis\day02\16mybatis和spring整合-sqlSessionFactory配置.avi;> MyBatis学习七:spring和MyBatis整合.逆向工程 ...
随机推荐
- NSLock的一些使用
在多线程的编程环境中,锁的使用必不可少! 使用时,基本方法就是: [lock lock]; // 加锁 [obj yourMethod]; // 处理你的操作 [lock unlock]; // 解锁 ...
- known
邻接表 https://blog.csdn.net/Violet_ljp/article/details/80556460 Dijkstra 算法实现原理 https://www.jianshu.co ...
- div固定在浏览器的最上方,不随滚动条滚动
#topDIV { position: fixed; ; ; width: 100%; height: 35px; border-bottom: 1px solid #eee; background- ...
- PCL中有哪些可用的PointT类型(4)
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=269 PointWithViewpoint - float x, y, z, ...
- SSM批量添加数据
如何应对面临批量数据时如何提交给后台 方式1: 使用JSON格式 后台功能接受实现使用@ResponseBody 前端当有多行数据的时候添加到一个数组再通过JSON格式到后台List接收 @Reque ...
- Servlet获取POST方法请求体数据
if ("POST".equalsIgnoreCase(request.getMethod())) { test = request.getReader().lines().col ...
- 包含min函数的栈、队列
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈/队列的最小元素的min函数.在该栈/队列中,调用min.入栈(入队列)及出栈(出队列)函数的时间复杂度都是O(1). 1. 包含min函数的栈 ...
- nginx反向代理cookie相关
http://blog.csdn.net/xiansky2015/article/details/51674997 http://www.jianshu.com/p/aeed2a56a3eb
- Python multiprocess模块(上)
multiprocess模块 一. Process模块介绍 1. 直接使用Process模块创建进程 (1)主进程和子进程 (2)if __name__ == "__main__" ...
- 【笔记】Docker部署Odoo
一,制作一个自己的odoo镜像odoo:yto 1,下载一个odoo10的镜像 docker pull odoo:10.0 2,按照自己的意愿修改里面的内容 docker run -it -u roo ...