Java封装
Java中的软件包用于对一组相关的类和接口进行分组。在包含成百上千个单独类的大型Java应用程序中,将相关类和接口分组为包有助于使事情井井有条。
Java中的包结构
软件包的结构与OS中目录的结构相同,在OS中,根目录可能包含零个或者多个子目录,然后有文件。在包结构中,存在与顶层包相同的方法,其中可能包含子包和类。
例如java.util.ArrayList
这里的顶级包是– java
包含subpackageutil
依次包含类ArrayList
在Java中使用包的优势
Java中的程序包具有以下优点
- 组织类的帮助包用于组织相关类和接口的集合,这使查找特定类,接口变得容易。如果要在另一个类中使用驻留在包中的特定类,则可以从该包中导入类并使用它。
- 防止名称冲突Java中的软件包还可以防止命名冲突。我们可以在不同的程序包中使用相同名称的类。例如com.theitroad.finance.MyClass和com.theitroad.accounts.MyClass。
- 提供访问控制程序包还有助于控制成员的可见性。包中包含受保护的访问说明符和默认访问说明符。具有默认访问权限的成员仅在其自己的程序包中可见。
- 具有受保护的访问权限的成员只能在其所属的包中或者由另一个包中其类的子类访问。
Java中的软件包类型
在Java编程语言中,有两种类型的软件包。
- 内置软件包Java随附有许多内置软件包的预包装,这些内置软件包包含根据功能分组在一起的类。例如,java.lang包含基本类。该软件包将自动导入。
- java.io包含用于读写(输入和输出)的类。
- java.util包含集合框架,日期和时间工具,国际化和其他实用程序类。
- 用户定义的程序包我们将在Java应用程序中使用这些内置程序包中包含的API类,但要在应用程序中对这些类进行分组,则将创建用户定义的程序包。
用Java创建一个包
要创建包,请在要包含在包中的每个源文件(类,接口,枚举和注释类型)的顶部放置一个带有包名称的package语句。
包创建的语法
package package_name;
包创建示例
package com.theitroad.programs; public class MyClass { public static void main(String[] args) { System.out.println("creating a package"); } }
在示例com.theitroad.programs包结构中,如果尚不存在该包结构,则将其创建。如果程序包已经存在,则该程序包中将包含MyClass类。
创建软件包时要记住的几点
- package语句必须在源文件的第一行。
- 每个源文件中只能有一个package语句。
Java中的子包
如开头所述,顶层程序包可能包含另一个称为子程序包的程序包。
通过使用子软件包,我们可以基于子功能隔离文件。用于更广泛功能的顶级包,以及包含按子功能分组的源文件的子包。
通过用点号(。)分隔包名称来创建包的层次结构。
例如com.theitroad.programs
在这里,程序是theitroad内位于com下的一个程序包。
用Java导入包
如果要从一个软件包的外部使用驻留在一个软件包中的特定源文件(类,接口),则必须执行以下操作之一:
- 导入包成员
- 导入会员的整个包裹
- 用完全限定的名称称呼该会员
导入包成员
要将特定成员导入当前文件,请在任何类型定义之前但在package语句之后,在文件的开头放置import语句。
例如,如果我们在类中使用HashMap类,则需要从java.util包中导入HashMap类。
package com.theitroad.programs; import java.util.HashMap; import java.util.Map; public class MyClass { public static void main(String[] args) { Map<String, String> testMap = new HashMap<String, String>(); } }
导入成员的整个包裹
我们可以导入整个程序包,而不必导入特定的类。
import java.util.*;
用完全限定的名称称呼该会员
除了使用import语句,我们还可以使用完全限定的名称。例如,如果我们在类中使用HashMap类,则可以使用完全限定名称。
package com.theitroad.programs; public class MyClass { public static void main(String[] args) { java.util.Map<String, String> testMap = new java.util.HashMap<String, String>(); } }