【Java开发指南 | 第三十一篇】Java 包(package)

简介: 【Java开发指南 | 第三十一篇】Java 包(package)

Java 包(package)

在Java中,包(Package)是用来组织类和接口的一种机制。它是将相关的类和接口组织在一起的一种逻辑方式,有点类似于文件系统中的文件夹。包可以包含子包,从而形成层级结构,有助于更好地组织和管理代码。


包的优点

1、包提供了命名空间的分隔,防止不同包中的类名、接口名等发生冲突。这使得在大型项目中更容易管理和维护代码。


2、包可以使用 Java 中的访问修饰符(如 public、protected、private)来限制对其中的类、接口和成员的访问。这有助于隐藏实现细节,并提供了一定程度的封装。


3、通过将相关功能或模块放置在同一个包中,开发人员可以更清晰地了解代码的组织结构,易于定位和维护特定功能。


4、包可以被其他代码重复使用,从而提高代码的重用性。例如,Java标准库中的各种包,如 java.util、java.io 等,提供了丰富的功能,可以被其他开发人员直接引用和使用。


5、类放在包中可以指定它们的可见性,使得某些类只能在包内部访问,而对外部代码隐藏起来,提高了代码的安全性和健壮性。


语法格式

包语句的语法格式为:


package pkg1[.pkg2[.pkg3…]];


若Ice.java 文件开头内容为:


package net.java.util;
public class Ice{
   ...
}

那么它的路径为 net/java/util/Ice.java


创建包

包声明应该在源文件的第一行。每个源文件只能有一个包声明。


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


创建包的示例如下。


在 animals 包中加入一个接口(interface):
/* 文件名: animal.java */
package animals;
interface Animal {
   public void eat();
   public void travel();
}



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


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 static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}



运行MammalInt.java:



import 关键字

为了能够使用某个包中的成员,我们需要在Java程序中明确导入该包。


import 关键字用于引入其他包中的类、接口或静态成员,无需完整地指定类的包名。


在 java 源文件中 import 语句必须位于 Java 源文件的头部,其语法格式为:


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


示例:


// import 语句引入java.util包中的两个类ArrayList、List
import java.util.ArrayList;
import java.util.List;
// 类的定义
public class MyClass {
    // 类的成员和方法
}


我们也可以使用通配符 * 来引入整个包或包的子包:


import i.c.*;

//可以导入 i.c 包中的所有类,从而在当前源文件中使用该包中的任何类的方法、变量或常量。


注意,使用通配符 * 导入整个包时,只会导入包中的类,而不会导入包中的子包。


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


示例如下:


下面的 a 包已经包含了 Employee 类,Boss 类引用 Employee 类的时候可以不用使用 a 前缀


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

如果 Boss 类不在 a 包中,则必须使用下面几种方法之一来引用 Employee 类


1、使用类全名描述,例如:
public class Boss {
   public void payEmployee(a.Employee e) {
      e.mailCheck();
   }
}


示例如下:


/*X.java文件,置于animals包中*/
package animals;
public class X {
    public void method() {
        System.out.println(1);
    }
}
/*Y.java文件,置于animals包外*/
public class Y {
    public void Z(animals.X e) {
        e.method();
    }
   
    public static void main(String[] args) {
        // 创建 X 类的实例
        animals.X x = new animals.X();
        // 创建 Y 类的实例
        Y y = new Y();
        // 调用 Y 类中的方法
        y.Z(x);
    }
}



Y类不在animals包中,但使用类全名引用了animals包中的X类:



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


import a.*;


3、使用 import 关键字引入 Employee 类:

import payroll.a;


注意:


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


目录
相关文章
|
6月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
220 1
|
7月前
|
人工智能 Java 开发工具
MCP Java 开发指南
MCP Java 开发指南
4731 43
MCP Java 开发指南
|
9月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
10月前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
417 17
|
Java Android开发
Eclipse 创建 Java 包
Eclipse 创建 Java 包
217 1
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
1003 0
Java/Spring项目的包开头为什么是com?
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
1273 4
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
1019 2
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
476 1