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

读者可订阅专栏:Java开发指南 |【CSDN@秋说】

在这里插入图片描述

Java 包(package)

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

包的优点

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

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

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

4、包可以被其他代码重复使用,从而提高代码的重用性。例如,Java标准库中的各种包,如 java.utiljava.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 声明必须在包声明之后,类声明之前。

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏,祝你平安喜乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值