包的使用细节和注意事项1|学习笔记

简介: 快速学习包的使用细节和注意事项1。

开发者学堂课程【Scala 核心编程-基础包的使用细节和注意事项1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8956


包的使用细节和注意事项1

 

内容介绍

一、scala 打包的形式

二、打包实操

三、Scala 包的叠加使用

四、Scala 包作用域原则

 

本章节介绍 Scala 包的注意事项和使用细节。

 

一、scala 打包的形式

scala 进行 package 打包时,有三种形式:

image.png

1、代码说明:传统方式。

package com.atguigu.scala

class Person{

val name="Nick"

def play(message:String):Unit={printh(this name+""+message)

}

}

2、代码说明:和传统写法等价,与上面一样。

package com.atguigu

package scala

class Person{

val name="Nick"

def play(message:String):Unit={printh(this name+""+message)

}

}

3、代码说明:此打包方式使用的最多,重点来讲解。

package com. atguigu{

package scala{

class Person{

def play(message:String):Unit={printh(this name+""+message)

}

}

 

二、打包实操

重点来看第三种打包方式,打开 Scala 新建一个文件 packagedemo:

package com.atguigu.chapter07.scalapackage

object packagedemo {

}

当然从上节课中知道Scala中包名和源码所在的系统文件目录结构可以不一致,所以 package com.atguigu.chapter07.scalapackage

可以去掉,直接写:

package com. atguigu{

package scala{

class Person{

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

}

}

package com.atguigu 是包名而其余是此包所编写的内容,可以是另外的子包,也可以是类等等。也就是package com. atguigu{} 表示创建了包 com. atguigu,在{ }中可继续写其它的子包如 scala(com.atguigu.scala),还可以写类,特质 trait,写 object 等等。

这也意味着在一个文件里面可以创建多个包,并且在各个包中创建各自的类,说明 scala支 持在一个文件中可以创建多个包,以及对多个包创建类、trait、object。这些是 java 无法做到的,java 无法在一个文件中可以创建多个包,需要用到其他包就要创建另一个文件,这就体现了 scala 的灵活。

示例:

package com.atguigu{    //包 com.atguigu

package scala{  //包com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

object Test100{  //表示在 com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

}

}

}

}

此时在 com.atguigu.scala包中已创建了三个类(PersonTest100、Test100$),运行后就会把文件放到当com.atguigu.scala 中,打开目录就可看到,如图:

image.png

三、Scala 包的叠加使用

Scala 包也可以像嵌套类那样嵌套使用(包中有包),这个在前面的第三种打包方式已经讲过了,在使用第三种方式时的好处是:程序员可以在同一个文件中,将类(class/object)、trait 创建在不同的包中,这样就非常灵活,打开刚才创建的 packagedemo:

package com.atguigu{    //包com.atguigu

class User{  //com.atguigu包下创建了 User类

}

package scala{  //包com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

object Test100{  //表示在com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

}

}

}

}

可以看到在 com.atguigu 包下创建了 User 类,运行后可看到 com.atguigu下多了 class 文件 User,如图:

image.png

同时嵌套使用(包中有包)又怎么实现,如下:

package com.atguigu{    //包 com.atguigu

class User{  //com.atguigu 包下创建了 User类

}

package scalal2{  //创建包 com.atguigu. scalal2

class User{  //在com.atguigu. scalal2 下创建类 User

}

}

package scala{  //包com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

object Test100{  //表示在 com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

}

}

}

}

可看到在 com.atguigu 下创建包 com.atguigu.scalal2,同时又在此包中创建了 Use r类,此时并未报错,因为此时新建的 User 在 com.atguigu.scalal2包下,并未在 com.atguigu 包,运行后会生成 scalal2文件夹,其下有User,如下图:

image.png

scalal2文件夹下的 class 文件 User:

image.png

当然此时还可以继续加包来实现各种操作,体现出 Scala 的灵活性。

 

四、Scala 包作用域原则

在同一个文件内可以创建多级包,这就体现出问题在包中相互访问类的问题这又有了作用域原则:

作用域原则:可以直接向上访问。即:Scala 中子包直接访问父包中的内容,大括号{}体现作用域(提示:Java中子包使用父包的类,需要 import,在 scala 中不需要)。在子爸和父包类重名时,默认采用就近原则,如果希望指定使用某个类,则带上包名即可。如下:

package com.atguigu{    //包com.atguigu

class User{  //com.atguigu包下创建了 User类

}

package scalal2{  //创建包 com.atguigu. scalal2

class User{  //在 com.atguigu. scalal2下创建类 User

}

}

package scala{  //包com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

object Test100{  //表示在com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

//我们可以直接使用父包的内容

val user=new User  //这里使用的就是父包的 User

printin(“user=”+user)

}

}

}

}

此时看到 scala 是可以引用父包的 User 的如图

image.png

如果有同名的的类,则采取就近原则来使用内容(比如包),所以当 scala 有 User 时依据就近原则就会使用自己的User:

package com.atguigu{    //包 com.atguigu

class User{  //com.atguigu包下创建了 User类

}

package scalal2{  //创建包 com.atguigu. scalal2

class User{  //在 com.atguigu. scalal2下创建类 User

}

}

package scala{  //包com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

class User{

}

object Test100{  //表示在com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

//我们可以直接使用父包的内容

val user=new User

printin(“user=”+user)

}

}

}

}

运行后此时就使用的是自己的 User,如下图:

image.png

当一定要使用父包的内容,则需要指定路径即可,如下:

package com.atguigu{    //包 com.atguigu

class User{  //com.atguigu包下创建了 User 类

}

package scalal2{  //创建包 com.atguigu. scalal2

class User{  //在 com.atguigu. scalal2下创建类 User

}

}

package scala{  //包 com.atguigu.scala

class Person{  //表示在 com.atguigu.scala下创建类 person

val name="Nick"

def play(message:String):Unit={

println(this name+”“+message)

}

}

class User{

}

object Test100{  //表示在 com.atguigu.scala创建 object Test

def main(args: Array[string]): unit={

printin(“ok”)

//我们可以直接使用父包的内容

val user=new User

printin(“user=”+user)

val user2=new com.atguigu.User()

printin(“user2”+user)

}

}

}

此时运行就分开使用User了,如下图:

image.png

相关文章
|
存储 算法 编译器
【探索QTime】Qt中的时间操作与转换指南
【探索QTime】Qt中的时间操作与转换指南
1767 0
|
数据可视化 BI Apache
Superset BI 数据可视化分析之超详细上手教程
Superset BI 数据可视化分析之超详细上手教程
1883 0
Superset BI 数据可视化分析之超详细上手教程
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
455 58
|
9月前
|
存储 算法 Java
G1原理—5.G1垃圾回收过程之Mixed GC
本文介绍了G1的Mixed GC垃圾回收过程,包括并发标记算法详解、三色标记法如何解决错标漏标问题、SATB如何解决错标漏标问题、Mixed GC的过程、选择CollectSet的算法
G1原理—5.G1垃圾回收过程之Mixed GC
|
存储 弹性计算 人工智能
阿里云Alex Chen:普惠计算服务,助力企业创新
本文整理自阿里云弹性计算产品线、存储产品线产品负责人陈起鲲(Alex Chen)在2024云栖大会「弹性计算专场-普惠计算服务,助力企业创新」中的分享。在演讲中,他分享了阿里云弹性计算,如何帮助千行百业的客户在多样化的业务环境和不同的计算能力需求下,实现了成本降低和效率提升的实际案例。同时,基于全面升级的CIPU2.0技术,弹性计算全线产品的性能、稳定性等关键指标得到了全面升级。此外,他还宣布了弹性计算包括:通用计算、加速计算和容器计算的全新产品家族,旨在加速AI与云计算的融合,推动客户的业务创新。
107242 10
|
机器学习/深度学习 Kubernetes 云计算
技术文档工程师和技术翻译
- 阿里云智能集团招聘技术岗,位于杭州和北京。 - 技术文档工程师岗位要求包括独立编写代码能力、快速学习新技术、简化复杂技术概念、扎实的技术理解和良好的时间管理。 - 翻译工程师还需具备相关学历背景、技术翻译经验和云产品知识。 **团队成员分享:** - 昱心(南洋理工大学,机器学习)和骞腾(UIUC,计算机科学)分享了他们在技术文档岗位上的成长,涉及大模型和K8S等技术。 - 舟预(北京交通大学,信息管理)强调技术文档的重要性,认为它是阿里云对外的权威发言人。 - 天蒙(南开大学,信息与通信工程)提到工作中与代码的紧密联系,团队支持技术成长。
24416 24
技术文档工程师和技术翻译
|
存储 弹性计算 人工智能
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
阿里云弹性计算产品线、存储产品线产品负责人Alex Chen(陈起鲲)及团队内多位专家,和中国电子技术标准化研究院云计算标准负责人陈行、北京望石智慧科技有限公司首席架构师王晓满两位嘉宾,一同带来了题为《通用计算新品发布与行业实践》的专场Session。本次专场内容包括阿里云弹性计算全新发布的产品家族、阿里云第 9 代 ECS 企业级实例、CIPU 2.0技术解读、E-HPC+超算融合、倚天云原生算力解析等内容,并发布了国内首个云超算国家标准。
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
|
存储 数据采集 数据可视化
认识DataHub:企业级数据管理的第一步
【10月更文挑战第23天】在数字化转型的时代,数据管理成为了企业发展的核心竞争力之一。如何高效地管理和利用海量数据,成为了每个企业都需要面对的问题。DataHub作为一款企业级数据管理平台,以其强大的功能和灵活的架构,为企业提供了一站式的数据管理解决方案。作为一名数据管理爱好者,我将从个人的角度出发,详细介绍DataHub的基本概念、主要功能、应用场景,以及为什么选择DataHub作为数据管理解决方案。此外,我还会提供简单的安装指南和快速入门教程,帮助初学者快速上手使用DataHub。
1495 1
|
自然语言处理 安全 API
"Pandabuy事件后,淘宝代购集运系统如何强化仿牌敏感词风控策略"
在Pandabuy事件后,淘宝代购集运系统强化仿牌敏感词风控,通过建立敏感词库、多平台API接口同步、文本信息过滤、人工审核及违规处理机制,以防止仿牌商品流通,保障消费者权益和市场健康。此策略旨在从源头识别并拦截仿牌商品,确保平台合规运营。
|
弹性计算 人工智能 自然语言处理
诚云科技招聘进行中!
诚云科技招聘进行中!
3761 2