Java 包(package)

2023-11-01

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用

  • 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
例如,一个Something.java 文件它的内容
package net.java.util;public class Something{ ...
}
那么它的路径应该是 net/java/util/Something.java 这样保存的。 package(包) 的作用是把不同的 java 程序分类保存,更方便的被其他 java 程序调用。
一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。
以下是一些 Java 中的包:
  • java.lang-打包基础的类
  • java.io-包含输入输出功能的函数
开发者可以自己把一组类和接口等打包,并定义自己的包。而且在实际开发中这样做是值得提倡的,当你自己完成类的实现之后,将相关的类分组,可以让其他的编程者更容易地确定哪些类、接口、枚举和注释等是相关的。
由于包创建了新的命名空间(namespace),所以不会跟其他包中的任何名字产生命名冲突。使用包这种机制,更容易实现访问控制,并且让定位相关类更加简单。

创建包

创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。
包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。

创建包

创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。

包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。

如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。

然后,编译这两个文件,并把他们放在一个叫做animals的子目录中。 用下面的命令来运行:
$ mkdir animals
$ cp Animal.class MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travel

import 关键字

为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 "import" 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。

package 的目录结构

类放在包中会有两种主要的结果:
  • 包名成为类名的一部分,正如我们前面讨论的一样。
  • 包名必须与相应的字节码所在的目录结构相吻合。
下面是管理你自己 java 中文件的一种简单方式:
将类、接口等类型的源码放在一个文本中,这个文件的名字就是这个类型的名字,并以.java作为扩展名。例如:

接下来,把源文件放在一个目录中,这个目录要对应类所在包的名字。

现在,正确的类名和路径将会是如下样子:
  • 类名 -> vehicle.Car
  • 路径名 -> vehicle\Car.java (在 windows 系统中)
通常,一个公司使用它互联网域名的颠倒形式来作为它的包名.例如:互联网域名是 runoob.com,所有的包名都以 com.runoob 开头。包名中的每一个部分对应一个子目录。
例如:有一个 com.runoob.test 的包,这个包包含一个叫做 Runoob.java 的源文件,那么相应的,应该有如下面的一连串子目录:

类目录的绝对路径叫做 class path。设置在系统变量 CLASSPATH 中。编译器和 java 虚拟机通过将 package 名字加到 class path 后来构造 .class 文件的路径。

设置 CLASSPATH 系统变量

用下面的命令显示当前的CLASSPATH变量:
  • Windows 平台(DOS 命令行下):C:\> set CLASSPATH
  • UNIX 平台(Bourne shell 下):# echo $CLASSPATH
删除当前CLASSPATH变量内容:
  • Windows 平台(DOS 命令行下):C:\> set CLASSPATH=
  • UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH
设置CLASSPATH变量:
  • Windows 平台(DOS 命令行下): C:\> set CLASSPATH=C:\users\jack\java\classes
  • UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 包(package) 的相关文章

  • JavaFX Platform.runLater 的使用以及从不同线程访问 UI

    我有几个问题Platform runLater 我有一个 JavaFX 应用程序类 在这个类中 我运行一个线程 该线程从网络套接字读取数据 现在当我创建一个新的Stage在线程内部 系统抛出异常 JavaFX 事件调度程序线程和我的网络读取
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 使用 AbstractTableModel 获取 JTable 中选定的行

    我有一个JTable using AbstractTableModel我在哪里有一个JCheckBox在第一列中用于选择行 现在 我需要从已检查的表中获取选定的行 现在 我按顺序从第一行遍历到最后一行并获取所有选择的行 如下所示 List
  • Java:高性能消息传递(单生产者/单消费者)

    我最初问这个问题here https stackoverflow com questions 3367192 java is while true loop in a thread bad whats the alternative 但我意
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • 如果基于 Spring 注解的控制器位于 jar 文件内,则该控制器无法工作

    我的子模块中有一些基于注释的控制器 这些模块作为 jar 文件部署 jar 文件中基于注释的控制器未加载到 spring 配置中 我使用 Eclipse 中的导出实用程序手动导出 jar 文件 有人遇到过这个问题吗 当您使用 Eclipse
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • 要打乱的键值(整数、字符串)列表的最佳结构

    我需要在 Java 中实现一个结构 它是一个键值列表 类型为整数 字符串 并且我想对其进行洗牌 基本上 我想做类似的事情 public LinkedHashMap
  • 哈希码是否用于加速集合中的对象查找?

    IIUC 相同类型的两个不同对象可以存储在 HashSet 中 即使两个对象在以下情况下返回相同的值 hashCode 叫做 例如根据本文 https eclipsesource com blogs 2012 09 04 the 3 thi
  • 如何将自定义日志处理程序添加到 Google App Engine?

    我正在尝试向我的 java 应用程序添加自定义日志处理程序 我已经实现了一个扩展 java util Logging Handler 类的 InnerLogger 类 在我的logging properties中声明为处理程序 handle
  • 尝试在java中的Arraylist中查找对象的所有出现

    我有一个 Java ArrayList 我需要查找其中出现的所有特定对象 ArrayList indexOf Object 方法只找到一次出现 所以看来我还需要其他东西 我认为你不需要太花哨 以下应该可以正常工作 static
  • BlackBerry SQLite:将一个 SQLite 数据库连接到另一个

    我正在尝试使用 SQLite 将一个 SQLite 数据库附加到 BlackBerry 上的另一个数据库附加数据库 http www sqlite org lang attach html命令 Database d1 d2 Statemen
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • 使用Java开发跨平台,不同平台字体缩放不同

    我正在为我的大学制作一些软件 需要一个 GUI 在它的第一个版本中 我让它使用系统外观 因此它看起来像 Linux Mac Windows 中的本机应用程序 我发现这很麻烦 因为我必须根据操作系统使所有 JLabel 具有不同的大小 无论分
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢
  • JMockit - 初始化问题

    当我使用以下测试时 我收到警告 警告 JMockit 是按需初始化的 这可能会导致某些测试失败 请检查文档以获取更好的初始化方法 这是我的测试实现 package test import static mockit Mockit impor
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐

  • Nginx:防盗链原理和配置

    目录 一 防盗链概念 二 Nginx防盗链的具体实现 配置 三 验证和验证时的问题 真正的验证 没有none的验证 加上none参数的验证 让报错返回的是一张图片 注意事项 一 防盗链概念 防盗链简单来说就是存在我们服务中的一些资源 只有我
  • simplis汉化包_Simtrix.simplis仿真_中文教程

    Simetrix Simplis 仿真基础 近 4 年开发电源的过程 在使用仿真软件的过程中 对仿真渐渐有了个了解 仿真不能代替 实验 仿真软件显示电路不能工作 而实际确能工作 仿真不收敛 而实际电路永远不会不 收敛 但是仿真软件可以测试未
  • [webpack-cli] Error: Cannot find module ‘webpack/lib/rules/DescriptionDataMatcherRulePlugin‘

    Laravel8用mix引入vue 但是出现错误 npm install 然后npm run dev 或者是npm run watch poll 出现以下错误 前两个月还没有报错 网上只有其他插件丢失报错 没有这个插件 使用npm 和vue
  • OpenGL ES 2.0编程基础

    http blog csdn net sunqunsunqun article details 7649628http blog csdn net sunqunsunqun article details 7649628 http blog
  • java的double类型比较相等

    当double类型数据当以带小数自增时出现的问题 public class test public static void main String args double a 0 while a lt 100 a 1 2 System ou
  • svn下载以及操作

    目录 第一步下载SVN及SVN汉化包 SVN下载 SVN汉化语言包下载网址 第二步安装SVN及汉化包 使用说明检出项目 导入项目 关于项目的提交 更新 解决冲突有三种选择 如何降低冲突解决的复杂度 查看日志 版本回滚 版本控制 创建分支合并
  • AIX下中文字符集问题

    1 来自IBM网站 http www 01 ibm com support do 82448256d650040768f2 aix中文字符集 如图 3 如何看到已安装的字符集 locale a4 查看当前的语言环境 env grep LAN
  • 关于ubuntu 64位 android studio 运行时,gradle卡住的问题

    主要是因为缺少相关的32位依赖库 可通过一下方法解决 终端输入以下命令 安装完成后 重启as即可 sudo dpkg add architecture i386 sudo apt get update sudo apt get instal
  • mybatis 3.4.5 常用配置标签 02

    1 properties
  • Pycharm 集成python3 的Qt Designer

    第一步 点击 File Settings 第二步 Tools External Tools 点击 号 第三步 设置Qt Designer 修改三个地方 其他地方默认 Name Qt Designer Programs D python3 6
  • 二线制、三线制、四线制,PT100,电桥(转)

    在工业现场 传感器距离控制器往往很长 所以导线电阻就不能忽略了 于是延伸出热敏电阻或远传压力表的二线 三线 四线制接法 li class tool item tool active is like a href a li
  • 15 Python数据可视化_作业

    Author Nimo Ding Seaborn数据集自带了car crashes数据集 这是一个国外车祸的数据集 1 请对这个数据集进行成对关系的探索 2 请用Seaborn画二元变量分布图 scatter kde hex import
  • python中的base64加密解密

    介绍 Base64是网络上最常见的用于传输8Bit 字节码的编码方式之一 Base64就是一种基于64个可打印字符来表示 二进制数据的方法 可查看RFC2045 RFC2049 上面有MIME的详细规范 Base64编码是从二进制到字符的过
  • C语言中的exit与return的区别

    exit 结束当前进程 当前程序 在整个程序中 只要调用 exit 就结束 exit 0 表示进程正常退出 返回 0 exit 1 表示进程非正常退出 返回 1 exit与return的区别 exit 函数与return语句的最大区别在于
  • 【博客689】监控进程的自愿与非自愿上下文切换

    监控进程的自愿与非自愿上下文切换 场景 有时候遇到机器没有性能瓶颈 但是进程出现性能瓶颈 这时候往往需要进程级别的监控 监控手段 process exporter https github com ncabatoff process exp
  • Python工程师常见的30个基础面试题

    一 Python 的特点和优点是什么 Python 是一门动态解释性的强类型定义语言 编写时无需定义变量类型 运行时变量类型强制固定 无需编译 在解释器环境直接运行 优点 1 解释性 Python 语言写的程序 不需要编译成二进制代码 可以
  • 字库制作和烧写

    文章目录 资源获取 一 介绍字库 1 GB2312 2 GBK 二 生成字库 1 打开字库生成软件 2 软件介绍 3 生成bin字库 三 烧录字库 1 打开串口烧录软件 2 配置软件 3 打开字库文件 4 将烧录程序下载到开发板 5 开始烧
  • MacOs 执行命令行报:permission denied:

    当前目录没有可执行权限 解决方案 代表文件目录 sudo chmod R 777
  • docker安装nacos2.0.3并配置mysql

    1 拉取镜像 docker pull nacos nacos server 2 0 3 2 创建数据目录 mkdir p mydata nacos2 0 3 logs mkdir p mydatadata nacos2 0 3 conf 3
  • Java 包(package)

    为了更好地组织类 Java 提供了包机制 用于区别类名的命名空间 包的作用 1 把功能相似或相关的类或接口组织在同一个包中 方便类的查找和使用 2 如同文件夹一样 包也采用了树形目录的存储方式 同一个包中的类名字是不同的 不同的包中的类的名