文章目录

  • 包的作用
  • 创建包
  • import 关键字
  • package 的目录结构
  • 设置 CLASSPATH 系统变量
  • 系统包

为了更好地组织类,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)中。

例子
让我们来看一个例子,这个例子创建了一个叫做animals的包。通常使用小写的字母来命名避免与类、接口名字的冲突。

在 animals 包中加入一个接口(interface):

Animal.java 文件代码:
/* 文件名: Animal.java */
package animals;interface Animal {public void eat();public void travel();
}

接下来,在同一个包中加入该接口的实现:

MammalInt.java 文件代码:

package animals;/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{public void eat(){System.out.println("Mammal eats");}public void travel(){System.out.println("Mammal travels");} public int noOfLegs(){return 0;}public static void main(String args[]){MammalInt m = new MammalInt();m.eat();m.travel();}
}

然后,编译这两个文件,并把他们放在一个叫做animals的子目录中。 用下面的命令来运行:

$ mkdir animals
$ cp Animal.class  MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travel

import 关键字

为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。

在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:

import package1[.package2…].(classname|*);

如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。

例子
下面的 payroll 包已经包含了 Employee 类,接下来向 payroll 包中添加一个 Boss 类。Boss 类引用 Employee 类的时候可以不用使用 payroll 前缀,Boss 类的实例如下。

Boss.java 文件代码:

package payroll;public class Boss
{public void payEmployee(Employee e){e.mailCheck();}
}

如果 Boss 类不在 payroll 包中又会怎样?Boss 类必须使用下面几种方法之一来引用其他包中的类。

使用类全名描述,例如:

payroll.Employee

用 import 关键字引入,使用通配符 *:

import payroll.*;

使用 import 关键字引入 Employee 类:

import payroll.Employee;

注意:

类文件中可以包含任意数量的 import 声明。import 声明必须在包声明之后,类声明之前。

package 的目录结构

类放在包中会有两种主要的结果:

包名成为类名的一部分,正如我们前面讨论的一样。
包名必须与相应的字节码所在的目录结构相吻合。
下面是管理你自己 java 中文件的一种简单方式:

将类、接口等类型的源码放在一个文本中,这个文件的名字就是这个类型的名字,并以.java作为扩展名。例如:

// 文件名 : Car.java

package vehicle;public class Car {// 类实现
}

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

....\vehicle\Car.java

现在,正确的类名和路径将会是如下样子:

类名 -> vehicle.Car

路径名 -> vehicle\Car.java (在 windows 系统中)

通常,一个公司使用它互联网域名的颠倒形式来作为它的包名.例如:互联网域名是 Demo.com,所有的包名都以 com.Demo 开头。包名中的每一个部分对应一个子目录。

例如:有一个 com.Demo.test 的包,这个包包含一个叫做 Demo.java 的源文件,那么相应的,应该有如下面的一连串子目录:

…\com\Demo\test\Demo.java
编译的时候,编译器为包中定义的每个类、接口等类型各创建一个不同的输出文件,输出文件的名字就是这个类型的名字,并加上 .class 作为扩展后缀。 例如:

// 文件名: aa.javapackage com.aa.test;
public class Demo {}
class Google {}

现在,我们用-d选项来编译这个文件,如下:

$javac -d . Demo.java

这样会像下面这样放置编译了的文件:

.\com\Demo\test\Demo.class
.\com\Demo\test\Google.class

你可以像下面这样来导入所有 \com\Demo\test\ 中定义的类、接口等:

import com.Demo.test.*;

编译之后的 .class 文件应该和 .java 源文件一样,它们放置的目录应该跟包的名字对应起来。但是,并不要求 .class 文件的路径跟相应的 .java 的路径一样。你可以分开来安排源码和类的目录。

<path-one>\sources\com\Demo\test\Demo.java
<path-two>\classes\com\Demo\test\Google.class

这样,你可以将你的类目录分享给其他的编程人员,而不用透露自己的源码。用这种方法管理源码和类文件可以让编译器和java 虚拟机(JVM)可以找到你程序中使用的所有类型。

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

\classes 是 class path,package 名字是 com.Demo.test,而编译器和 JVM 会在 \classes\com\Demo\test 中找 .class 文件。

一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况下,编译器和 JVM 查找当前目录。JAR 文件按包含 Java 平台相关的类,所以他们的目录默认放在了 class path 中。

设置 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

系统包

Java SE 提供了一些系统包,其中包含了 Java 开发中常用的基础类。在 Java 语言中,开发人员可以自定义包,也可以使用系统包,常用的系统包如表 1 所示。

表1 Java中常用的系统包

说明
java.lang Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、
字符串处理、异常处理和线程类等,系统默认加载这个包
java.io Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等
java.util 包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类
java.awt 构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理
(如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事
件响应(如 Event 类)
java.awt.image 处理和操纵来自网上的图片的 Java 工具类库
java.wat.peer 很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行
java.net 实现网络功能的类库有 Socket 类、ServerSocket 类
java.lang.reflect 提供用于反射对象的工具
java.util.zip 实现文件压缩功能
java.awt.datatransfer 处理数据传输的工具类,包括剪贴板、字符串发送器等
java.sql 实现 JDBC 的类库
java.rmi 提供远程连接与载入的支持
java. security 提供安全性方面的有关支持

读者现在只需对这些包有一个大致印象即可,随着教程后面的介绍,读者会逐渐熟悉它们的用法。

【java】Java 包(package)相关推荐

  1. java从包package中获取所有的Class

    1.从包package中获取所有的Class方法: /** * 从包package中获取所有的Class * @param pack * @return */ public static List&l ...

  2. Java的类(class)、包(package)和接口(interface)

    在Java中,类(class)是用来代表对象的基本单元.对象(object)可以是现实世界中的任何一个实体,它具有若干区别于其它对象的属性和操作.而类则通过为对象定义属性和操作来概括一类实体.它封装了 ...

  3. Java中的包(package)详情解释

    一.Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一 ...

  4. Java 包(package)

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

  5. java package 目录_修改jar包package目录结构操作方法

    本文将为您描述修改jar包package目录结构操作方法,具体操作过程: 开发中会遇到用第三方的jar包,有时候会出现不同的jar包,包名一致的情况,这就会引发运行时异常,找不到相应的jar包. 这种 ...

  6. Java之~~包(package)

    关于java语言中的package和import机制: 1.为什么要使用package?         package是java中包机制.包机制的作用是为了方便程序的管理.         不同功能 ...

  7. Java包(package)

    Java包package 1.包的概念 2.包的定义 3.常见包 4.包的引入 1.包的概念 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用: 把功能相似或相关的类或接口 ...

  8. Java类包的定义(package)

    Java 类包(package) 当我们开发项⽬的时候,会⽤到很多的类文件,这样就不⽅便管理 我们可以通过包对类进⾏管理分类,也可以避免重名的问题,⼀种类型的java类放在⼀个包⾥⾯,或者⼀个模块的j ...

  9. [ Java学习 ] 包语句 package等语句的汇总整理

    之前对package等语句的了解并不是很深,今天借此机会,用这篇博文,好好梳理一下关于 Java 的包,和Java 的 package 等语句的有关知识: // 啰嗦一句,在 DOS 下编译运行带有包 ...

最新文章

  1. OpenvSwitch — 安装部署与基本操作
  2. [转]MySQL Explain详解
  3. Java学习笔记(八)--字符串生成器
  4. 【收藏】如何避免everything每次都重建索引
  5. IOS弹出视图preferredContentSize
  6. win2008修改远程端口
  7. 开源前端 可视化大数据交互前端动态模板
  8. pip install flask-mongoengine报错
  9. 屏幕分析师确认两款iPhone 13将采用LTPO屏幕 支持120Hz刷新率
  10. ruby基本语法(2)
  11. /plus/recommend.php sql注入漏洞,代码审计:ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法 | Seay 渗透 编程 代码审计 网络安全博客...
  12. adb 静默安装_Android静默安装的实现方案(一)
  13. 20HTML5期末大作业:影视视频网站设计——爱影评在线电影(10页面) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  14. 第一个游戏外挂,附上详细制作过程
  15. vb局域网连接mysql_VB 用代码进行局域网内数据库的连接
  16. 2层框架结构柱子间距_2层框架结构如何选取柱子宽度尺寸
  17. Vue脚手架的三种安装方式
  18. 物料编码的方法与技术
  19. 原生js、css分别实现提示框渐渐消失的效果
  20. 计算机基础三: 二进制减法实现

热门文章

  1. 常用元器件使用方法26:LoRa芯片SX1268的使用方法(硬件连接)
  2. linux 嵌入式 快照_Linux下搭建Cortex-M嵌入式开发环境
  3. load函数无法打开MAT文件:不是二进制 MAT 文件。请尝试执行 load -ASCII 以便以文本形式读取。
  4. VUE的父传子 子传父
  5. python手机端给电脑端发送数据_神途传奇 (手机端+电脑端) 数据互通 传奇来袭 www.8wf.com...
  6. Visual Studio Code For Markdown Guide
  7. 优思学院|“元宇宙“是什么东西?
  8. ThinkPad P1 Gen4 是否支持单条4T固态?
  9. 西门子real是什么数据类型_【图】西门子s7-300 plc的数据类型有哪些?
  10. 莫纳什大学计算机专业在哪个校区,莫纳什大学校区几个