Java 中的包以及如何使用它们?
已发表: 2022-04-18Java 中的包用于对相关的类、接口和子包进行分组。 我们使用 Java 包来避免命名冲突,因为在两个不同的包中可以有两个同名的类。 此外,使用 Java 包,搜索、定位和使用接口、类、注释和枚举变得更加容易。
使用 Java 编程语言编写软件涉及许多单独的类,只有将相关的类和接口组织成包才有意义。 在某种程度上,您可以将 Java 包与我们用来组织各种文件并保持工作整洁的计算机中的文件夹进行比较。
本指南将讨论 Java 中不同类型的包以及如何使用它们。
Java中的包类型
Java 中的包根据用户是否定义它们进行分类。 两种Java包是:
- 内置包
- 用户自定义包
1. 内置包
预定义或内置的 Java 包作为 Java 开发工具包 (JDK) 的一部分出现,由许多属于 Java API 的预定义类和接口组成。 Java中一些常用的内置包如下:
- java.io:包含支持输入/输出操作的类。
- java.lang:这个内置包是自动导入的,包含语言支持类。
- java.util:包含实现数据结构的实用类,如字典和支持、链表、日期和时间操作等。
- java.net:包含支持网络操作的类。
我们必须使用 import 语句来导入任何内置的 Java 包并使用它包含的类。
一个简单的例子来展示 Java.util 包的 ArrayList 类的使用,如下所示:
包示例;
导入 java.util.ArrayList;
类 BuiltInPackage {
公共静态无效主要(字符串[]参数){
ArrayList<Integer> myList = new ArrayList<>(3);
myList.add(3);
myList.add(2);
myList.add(1);
System.out.println(“列表有元素:” + myList);
}
}
输出:
该列表包含以下元素: [3, 2, 1]
在上面的 Java.util.ArrayList 示例中,Java 是顶级包,util 是子包,ArrayList 是子包 util 中存在的类。
在 Java 中导入包
如前面的示例所示,Java 有一个 import 语句,可以让我们导入整个包或仅使用包中定义的某些接口和类。
import 语句的一般语法是:
- 导入包名。类名; //只导入某个类
- import package.name.* //导入整个包
例如,导入 java.util.Date; 仅导入 Date 类,而 import java.io.*; 导入 java.io 包包含的所有内容。
但是,在 Java 中 import 语句是可选的,如果我们想使用某个包中的类或接口,我们可以使用它的完全限定名,如下所示:
类 MyClass 实现 java.util.Date {
//身体
}
2. 用户自定义包
从名称中可以看出,用户定义的包是由用户创建的,用于对类、接口和子包进行分组。
创建用户自定义包
要在 Java 中创建用户定义的包,我们将为我们的包选择一个名称,并使用 package 命令作为 Java 源文件中的起始语句。 例如,我们将使用以下语句创建一个名为 ExamplePackage 的包:
包示例包;
package 语句指定我们定义的类所属的包。 如果我们不使用 package 语句,类名将被放入 Java 中没有名称的默认包中。
从世界顶级大学学习在线软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
在 Java 包中创建一个类
一旦我们创建了包,下一步就是在包中创建一个类。 为此,我们将在程序的第一条语句中声明包名,然后将类作为包的一部分。
下面给出了一个简单的程序来展示如何在 Java 包中创建一个类。 在给定的示例中,我们在包 ExamplePackage 中创建了一个类 Calculate。
包示例包;
公共类计算{
公共 int add(int p, int q){
返回 p+q;
}
公共静态无效主要(字符串参数[]){
计算 obj = new Calculate();
System.out.println(obj.add(70, 12));
}
}
输出: 82
Java 将包存储在文件系统目录中。 因此,上述程序将保存在一个名为 Calculate.java 的文件中,并存储在名为 ExamplePackage 的目录中。 编译文件后,Java 将创建一个“.class”文件并将其存储在 ExamplePackage 目录中。
现在,您可以在另一个程序中使用 ExamplePackage 包。 就是这样:
导入 ExamplePackage.Calculate;
公开课演示{
公共静态无效主要(字符串参数[]){
计算 obj = new Calculate();
System.out.println(obj.add(200, 523));
}
}
输出: 723
在上面的例子中,我们已经导入了包 ExamplePackage 来使用类Calculate。 将包导入为 ExamplePackage.Calculate 仅导入 Calculate 类。 但是,如果 ExamplePackage 包中有多个类,则可以使用以下 import 语句来使用包中的所有类:
导入示例包。*;
在导入另一个包时在一个包内创建一个类
要在导入另一个包的同时在一个包内创建一个类,我们将首先声明包名,然后导入另一个包。 以下示例演示了相同的内容:
包装其他包装; //声明一个包
导入 ExamplePackage.Calculate; //导入一个包
公共类示例{
公共静态无效主要(字符串参数[]){
计算 obj = new Calculate();
System.out.println(obj.add(300, 700));
}
}
输出: 1000
在上面的例子中,我们声明包OtherPackage,从包ExamplePackage中导入类Calculate,然后创建类Example。
使用完全限定名称导入类
我们可以通过使用完全限定名称来避免导入语句。 使用完全限定的名称只能使包的声明类可访问。 但是我们每次访问类或接口时都需要使用完全限定名。 当两个包具有相同的类名时,使用完全限定名导入类会派上用场。
以下示例说明了相同的情况:
1.计算.java
包示例包;
公共类计算{
公共 int add(int x, int y){
返回 x+y;
}
公共静态无效主要(字符串参数[]){
计算 obj = new Calculate();
System.out.println(obj.add(20, 50));
}
}
2. 演示.java
包装其他包装; //声明一个包
公开课演示{
公共静态无效主要(字符串参数[]){
ExamplePackage.Calculate obj = new ExamplePackage.Calculate(); //使用完全限定名而不是导入
System.out.println(obj.add(200, 100));
}
}
输出: 300
在下面的示例中,我们使用完全限定名称 ExamplePackage.Calculate 来创建它的对象,而不是导入包。
3. Java中的子包
现在我们已经了解了 Java 包以及如何创建它们,让我们了解 Java 中子包的概念。
子包是另一个包内的包,用于进一步对包进行分类。 换句话说,如果我们在 ExamplePackage 包中创建一个包 multiply ,那么 multiply 就是子包。 因此,如果我们想在这个子包中创建一个类乘法,那么子包应该在开始时有一个声明。
以下程序演示了 Java 子包的概念:
包 ExamplePackage.multiply; //声明子包
公共类乘法{
整数乘积(整数 p,整数 q){
返回 p*q;
}
}
现在,如果我们想使用乘法类,我们可以:
- 使用语句 import ExamplePackage.multiply 导入它; 或者
- 使用完全限定名称,例如 ExamplePackage.multiply.Multiplication obj = new ExamplePackage.multiply.Multiplication();
前进之路
Java 中的包可以是内置包,也可以是用户定义的,它们对于更好地访问和管理代码至关重要。 Java 包的概念对于软件开发领域的任何人都至关重要。
upGrad 的软件工程与工作相关的 PG 认证是一个为期 5 个月的在线课程,可以帮助您掌握编程技能并为软件角色做好准备。 该计划侧重于 Java、JavaScript、CSS3、HTML5 等关键技能,专为想要学习编程的新生设计。
节目亮点:
- 专注于 MERN/云原生
- 500 多个内容小时
- 50+现场会议
- 350 多个小时的实践培训
- 五个行业项目
- 360 度学习支持
- 与行业专家交流
注册 今天,向最好的人学习!
什么是包及其类型?
包是相关 Java 实体的集合,例如类、子类、接口、注释和枚举。 它还可以包含子包。 Java 中的包有两种类型——内置包和用户自定义包。
为什么我们在 Java 中使用包?
我们在 Java 中使用包来防止命名冲突,使搜索、定位和使用类、接口、注释和枚举更容易,控制访问和数据封装。
Java 中的包级访问是什么?
在未指定访问修饰符的情况下,Java 中的包级别访问是 Java 提供的默认访问级别。 访问修饰符的作用是限制对其应用的类、变量或方法的可访问性。