【Java】到底什么是包?|最通俗易懂讲解|保姆级

news2024/9/24 5:28:00

在这里插入图片描述

  • 博主简介:努力学习的预备程序媛一枚~
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Java岛冒险记【从小白到大佬之路】

在这里插入图片描述

目录

  • Part1:类比+理解:
  • Part2:与包(package)正式见面:
    • 2.1:包的本质--文件夹
    • 2.2:给包命名
    • 2.3:包的三大作用:
  • Part3:import
    • 3.1:初识import
    • 3.2:import两种声明格式
  • Part4:Java中常用包简介:

Part1:类比+理解:

一个例子–管理学校学生:
 在一个学校中,学生根据专业、年级、班级来划分。如果一个学校的学生不分年级、班级,一起上课,这当然是不合理的。因为不易于管理。还有一点,学校中的学生难免会有重名,所以在涉及到某个具体学生的时候,一定是说明:哪个专业,哪个年级,哪个班级(eg:计科221瑶瑶子),这样才能防止不必要的误会—防止重名。
类比:
 一个Java程序/项目,有若干类组成。我们该如何管理这些类,和操作这些类呢?思路和上面的管理一个学校是完全一致的。

  • 一个Java程序→一个学校
  • 一个Java程序包含的n个类→一个学校中的n个学生
  • 包→专业.年级.班级

Part2:与包(package)正式见面:

2.1:包的本质–文件夹

 由上可知道,包其实就是一份空间用来存储类文件,这个包其实就是文件夹!
在这里插入图片描述

在这里插入图片描述
详解:java这个大包包中存放了若干小包,其中util包中(就是util文件夹中)存在各种工具类(工具类文件)。
在这里插入图片描述

2.2:给包命名

【命名规则】

  • 只能包含数字,字母,下划线,小圆点,不可以包含关键字,保留字.
    eg:com.yaoyao

关于小圆点:

  • 对于一个独立的包来说,小圆点的确是它名字的一部分。原因还是一样的,有这么多包,难免有重名,比如我说;java.util这个包,就代表:java这个大包中的util这个包。所以你可以理解为:java.util是这个包的全名。(就像221是我的班级名称,但是更准确来说,计科221也是我的班级名称)
  • 在IDEA创建包时(就是创建目录!!!),小圆点相当于/.
    eg:这里演示一下:创建com.yaoyao这个包名的包在这里插入图片描述在这里插入图片描述
    【命名规范】
com.公司名.项目名.业务模块名

2.3:包的三大作用:

  • 区分相同名字的类–防止命名冲突
    比如老王的家的孩子叫小虎,老李家的孩子也叫小虎,这两个孩子是相同的嘛?不是,防止冲突,我们一般会说:老王家的小虎、老李家的小虎,加上前缀:这样以表示区别
    eg:com.yaoyao.Test类和com.xxx.Test是不同的类,正是由于分包管理,加上包名以示区分,避免了命名冲突。
  • 方便管理
    当我们一个java程序中有很多类时,我们把这些类文件分门别类,把功能相关的类/接口,放在一个包中/目录下,方便查找,使用,管理。
    (其实我们使用Java API文档的原理就是这个)
  • 控制访问范围
    用于包访问权限,才可进行访问。
    关于访问权限,我们下期着重讲,这里暂不展开叙述。

Part3:import

3.1:初识import

通过part2我们知道了,通过加上包名前缀来指定某个类,可以防止命名冲突,更好的来使用类。像下面这样:

package com.yaoyao

class Demo {
	java.util.Scanner scanner = new Scanner(System.in);
}

but:这样不会累嘛!?是的,为了不让我们程序员这么累,于是一个一个关键字出现了----import

有了这个关键字,上面代码可以这些写:

package com.yayao;

import java.util.Scanner;

public class Demo {
    Scanner scanner = new Scanner(System.in);
}

【代码详解】:

  • package com.yaoyao:其实就是声明当前这个类在哪个目录下(路径下),说白了,就是一个人,不可能同时在两个地方!(就是用高级语言告诉计算机,它在哪,不然计算机都不知道!)。

  • import java.util.Scanner;:告诉计算机,接下来用到的Scanner类,是java.util包里面的。在编译的时候,会给下面的类的名称根据import来补全!(在编译的时候还是让类带上了全名,但是这就是计算机来做的了,我们程序员只要一句import就行,帮我们省力~)

3.2:import两种声明格式

  • import 包名.类名
    即:指定使用这个包中的这个类
import java.util.Scanner
  • import 包名.*
    即:告诉计算机:下面代码中的类,是在此包中的类
import java.util.*

【细节】:建议使用到哪个类,就import 包名.类名。因为这样更具有可读性!虽然import 包名.*并不影响运行速度(因为不像C中的include会在把文件直接导进来),import声明只是方便编译器在编译时自动给下面类名补全,不需要我们程序员费力!

补充一些不用import 包名.*的理由:

1.编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。
2.命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
3.说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
4.无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。

【注意】:

  • 当两个类在同一个包下不需要import(因为可以直接访问)
  • package声明要放在类的最上面,且一个类中只能有一条packge 语句(一个人不可能在两个地方)
  • import语句放在:package声明之后,类定义之前,可以有多条,没有顺序要求。

Part4:Java中常用包简介:

  • java.lang:系统提供基本包,默认引入(不需要import)
  • java.util:系统提供工具包,其中为工具类(如Scanner类)
  • java.net:网络包(涉及网络开发)
  • java.awt:做Java界面开发(GUI)


参考文章:link
下期预告–详细讲解Java–访问修饰符
专栏系列文章:

  • 【Java】还不懂this关键字?一分钟彻底弄懂this关键字
  • 【JavaSE】一文看懂构造器/构造方法(Cunstructor)
  • 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏

原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习C++基本数值类型

写在前面 正在学习C/C/Javascript,面向初学者撰写专栏 博主原创C/C笔记(干货),如有错误之处请各位读者指正 请读者评论回复、参与投票,反馈给作者,我会获得持续更新各类干货的动力。 致粉丝:可以…

力扣刷题记录——709. 转换成小写字母、771. 宝石与石头、704. 二分查找

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——709. 转换成小写字母、771. 宝石与石头…

C++11并发指南二(stdthread详解)

C11并发指南二(stdthread详解) 文章目录C11并发指南二(stdthread详解)std::thread 构造move 赋值操作其他成员函数上一篇博客《 C11 并发指南一(C11 多线程初探)》中只是提到了 std::thread 的基本用法,并给出了一个最…

{(leetcode 题号:169. 多数元素)+(189. 轮转数组)}时间复杂度与空间复杂度分析:

目录 一. 基本概念 1.时间复杂度 2.空间复杂度 二.实例分析 实例(1):旋转数组 方法1:暴力旋转法(时间复杂度加空间复杂度分析) 方法2 :三步整体逆序法 (时间复杂度加空间复杂度分析) 实例(2):斐波那契递归的时间复杂度和空间复杂度分析 实例(3):169. 多数元素…

模拟实现C库函数(1)

"啊~所有经历给它赋予魔力。"很久没更新过C专栏的文章了,借复习(review)的机会,本节的内容针对我们一些常见、常用的C库函数的模拟实现。“当你行走了一段时间后,回头往往那不管是起初咿咿呀呀胡乱踩陷的小坑时,还是之后…

C++11并发指南三(stdmutex详解)

C11并发指南三&#xff08;std:mutex详解&#xff09; 文章目录C11并发指南三&#xff08;std:mutex详解&#xff09;<mutex> 头文件介绍Mutex 系列类(四种)Lock 类&#xff08;两种&#xff09;其他类型函数std::mutex 介绍std::mutex 的成员函数std::recursive_mutex 介…

miracl

文章目录Windows平台编译网址 https://miracl.com/https://github.com/miracl/MIRACL Windows平台编译 源码目录下新建文件夹ms32或ms64&#xff0c;把/lib/ms32doit.bat或ms64doit.bat分别拷进去。 把源码include和source目录所有文件拷贝进要编译的ms32或ms64&#xff0c…

32. 实战:PyQuery实现抓取TX图文新闻

目录 前言 &#xff08;链接在评论区&#xff09;&#xff08;链接在评论区&#xff09;&#xff08;链接在评论区&#xff09; 目的 &#xff08;链接在评论区&#xff09;&#xff08;链接在评论区&#xff09;&#xff08;链接在评论区&…

ATAC-seq分析:Motifs分析(11)

1. 切割位点 ATACseq 应该在较小的保护区&#xff08;如转录因子结合位点&#xff09;周围生成较短的片段&#xff08;我们的无核小体区域&#xff09;。 因此&#xff0c;我们可以在不同组织/细胞类型/样本中寻找围绕感兴趣基序的切割位点堆积。 为了从我们的 BAM 文件中生成切…

FecMall多语言商城宝塔安装搭建教程

FecMall多语言商城宝塔安装搭建教程 1.1、删除禁用函数 PHP管理→禁用函数&#xff0c;删除putenv、pcntl_signal函数 如果不删除会报错&#xff1a;[ErrorException] pcntl_signal() has been disabled for security reasons 1.2下载fecmall 进入如下目录中cd /www/wwwroot 下…

行为型模式-中介模式

1.概述 一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会呈现为复杂的网状结构&#xff0c;这是一种过度耦合的架构&#xff0c;即不利于类的复用&#xff0c;也不稳定。例如在下左图中&#xff0c;有六个…

LeetCode 2325. 解密消息

给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐&#xff0c;形成对照表。 按照对照表 替换 mess…

〖产品思维训练白宝书 - 核心竞争力篇⑤〗- 产品经理核心竞争力解读之如何培养创造力

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

【从零开始】力扣刷题(1)

文章目录前言数组&#xff1a;数组的遍历485.最大连续的一个数495.提莫攻击414.第三大的数628.三个数的最大乘积数组&#xff1a;统计数组中的元素645.错误的集合697.数组的度484.找到所有数组中消失的数组442.数组中重复的数据41.缺失的第一个正数274.H指数前言 我根据这里的…

Scalable SoftGroup for 3D Instance Segmentation on Point Clouds

Abstract 本文考虑了一个称为SoftGroup的网络&#xff0c;用于准确和可扩展的3D实例分割。现有的最先进方法会产生硬语义预测&#xff0c;然后进行分组以获得实例分割结果。然而&#xff0c;源于硬决策的错误会传播到分组中&#xff0c;导致预测实例与ground truth的低重叠和大…

数据结构:排序的基本概念

排序(sorting)是按关键字的非递减或非递增顺序对一组记录重新进行整队(或排列)的操作。确切描述如下: 假设含有 n 个记录的序列为 {r1 ,r2 , … ,rn} (3-1) 它们的关键字相应为 {k1 ,k2 , … ,kn} 对式(3-1)的记录序列进行排序就是要确定序号 1,2,,n 的一种排列 p1,p2 , … …

MyBatis 表连接查询写法|三种对应关系

❤️作者主页&#xff1a;微凉秋意 ✅作者简介&#xff1a;后端领域优质创作者&#x1f3c6;&#xff0c;CSDN内容合伙人&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3c6; ✨精品专栏&#xff1a;C面向对象 &#x1f525;系列专栏&#xff1a;JavaWeb 文章目录前言表连接…

JS 6万字超详细总结

文章目录1. JS简介2. JS的使用2.1 行内式2.2 内嵌式2.3 外部式3. JS基础语法3.1 注释3.2 变量3.3 输入和输出3.4 数据类型3.4.1 字符串类型3.4.2 数字类型3.4.3 布尔类型3.4.4 Undefined和Null3.4.5 获取变量的类型3.5 数据类型转换3.5.1 转换为字符串类型3.5.2 转换为数字类型…

Java多线程(二)——ReentrantLock源码解析(补充4——条件变量Condition)

ReentrantLock源码解析&#xff08;补充4——条件变量Condition&#xff09; 上一章 ReentrantLock源码解析 仅介绍了 ReentrantLock 的常用方法以及公平锁、非公平锁的实现。这里对上一章做一些补充。主要是&#xff1a; AQS 中阻塞的线程被唤醒后的执行流程可打断的锁 lock…

CDH数仓项目(二) —— 用户行为数仓和业务数仓搭建

0 说明 本文基于《CDH数仓项目(一) —— CDH安装部署搭建详细流程》开始搭建数仓 1 数仓搭建环境准备 1.1 Flume安装部署 1&#xff09;添加服务 2) 选择Flume 3&#xff09;选择依赖 4)选择部署节点 5) 安装完成 1.2 安装Sqoop 1&#xff09;添加服务 2&#xff09;选…