Java - 包

在Java中使用包以防止命名冲突,控制访问,使类,接口,枚举和注释的搜索/定位和使用更容易等.

A 包可以定义为提供访问保护和命名空间管理的相关类型(类,接口,枚举和注释)的分组.

一些现有的包Java是 :

  • java.lang : 捆绑基础类

  • java.io : 输入,输出函数的类捆绑在这个包中

程序员可以定义自己的包来捆绑类/接口组等.对您实现的相关类进行分组是一种很好的做法,这样程序员就可以轻松确定类,接口,枚举和注释是否相关.

由于包创建了一个新的命名空间与其他包中的名称不会有任何名称冲突.使用包,更容易提供访问控制,也更容易找到相关的类.

创建包

创建包时,您应该为包选择一个名称,并在每个源文件的顶部包含一个包语句以及该名称,该文件包含要包含在其中的类,接口,枚举和注释类型包.

package语句应该是源文件中的第一行.每个源文件中只能有一个package语句,它适用于文件中的所有类型.

如果没有使用package语句,那么类,接口,枚举和注释类型将放在当前的默认包中.

要使用包语句编译Java程序,必须使用-d选项,如下所示.

javac -d Destination_folder file_name.java

然后在指定的目的地创建具有给定包名的文件夹,已编译的类文件将放在该文件夹中.

示例

让我们看一个创建一个名为 animals.最好使用带有小写字母的包的名称,以避免与类和接口的名称发生冲突.

以下包示例包含名为 animals  :

/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

现在,让我们在同一个包中实现上述接口 animals :

package animals;
/* File name : 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();
   }
}

现在编译java文件,如下所示 :

$ javac -d . Animal.java 
$ javac -d . MammalInt.java

现在将在当前目录中创建名为 animals 的包/文件夹,这些类文件将是放在其中,如下所示.

你可以执行包中的类文件并得到如下所示的结果.

Mammal eats
Mammal travels

导入关键字

如果某个类想要在同一个包中使用另一个类,则不需要使用包名.同一个包中的类找不到任何特殊语法.

示例

这里,一个名为Boss的类被添加到工资包中包含员工.然后Boss可以在不使用payroll前缀的情况下引用Employee类,如下面的Boss类所示.

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

如果Employee类不在工资包中,会发生什么?然后,Boss类必须使用以下技术之一来引用不同包中的类.

  • 完全限定名称可以使用类.例如 :

payroll.Employee

  • 可以使用import关键字和通配符(*)导入包.例如 :

import payroll.*;

  • 可以使用import关键字导入类本身.例如 :

import payroll.Employee;

注意 : 类文件可以包含任意数量的import语句. import语句必须出现在package语句之后和类声明之前.

包的目录结构

当一个类是一个类时,会出现两个主要结果放在包中 :

  • 包的名称成为类名称的一部分,因为我们只是在上一节中讨论过.

  • 包的名称必须与相应字节码所在的目录结构相匹配.

以下是使用Java管理文件的简单方法 :

放置类,接口,枚举或注释的源代码输入一个文本文件,其名称是该类型的简单名称,其扩展名为 .java .

例如 :

// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

现在,将源文件放在一个目录中,该目录的名称反映了该类所属的包的名称并减去;

.... \vehicle\Car.java

现在,合格的类名和路径名如下:<

  • 班级名称和rarr; vehicle.Car

  • 路径名称 →  vehicle \Car.java(在windows中)

一般情况下,公司使用其反向的互联网域名作为其包名.

示例 : 公司的互联网域名是apple.com,然后它的所有包名都将以com.apple开头.包名称的每个组件对应一个子目录.

示例 : 该公司有一个com.apple.computers包,其中包含一个Dell.java源文件,它将包含在一系列子目录中,例如这个 :

....\com\apple\computers\Dell.java输出文件,
 用于定义每个类,接口和枚举.输出文件的基本名称是类型的名称,其扩展名为.