Logo

郎哥编程

理解Java包的概念

2018-02-13 890

前面讲到Java项目可以管理几十个甚至更多的类文件,不同功能的类文件被组织到不同的包中,包类似于文件系统中的文件夹,它可以允许类组成较小的类文件夹,易于找到和使用相应的文件。

如同文件夹一样,包也采用了树形目录的存储方式。同一个包中类名字是不同的,不同包中类的名字可以相同,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

JDK中定义的类就采用了“包”机制进行层次式管理。例如,下图显示了其组织结构的一部分。

                                             

a1067.png

图 10-28  Java包逻辑结构

从上图可以看出,一个名为Java的包中又包含了两个子包:io包和lang包。lang包中包含了System、String、Object这三个类的定义。事实上,Java包中既可以包含类的定义,也可以包含子包,或同时包含两者。从逻辑上讲,包是一组相关类的集合,从物理上讲,同包即同目录。

在java中用关键字“package”来创建包,HelloWorld项目HelloWorld.java给出了包创建代码样例:

package hello;
public class HelloWorld {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print("HelloWorld");
    }
}

HelloWorld项目包逻辑结构如下图所示:

a1068.png


图 10-29 HelloWorld项目包逻辑结构

HelloWorld项目包逻辑结构对应的物理目录结构如下图所示:

a1069.png


图 10-30 HelloWorld项目物理目录结构

其中,逻辑结构图中的项目节点HelloWorld对应文件目录HelloWorld,逻辑结构图中的目录节点src对应文件目录src,逻辑结构图中的包节点hello对应文件目录hello,逻辑结构图中的HelloWorld.java对应文件目录hello下的HelloWorld.java。

创建包时需要注意如下几点:

(1)创建包时用package关键字;

(2)如果有包声明,包声明一定作为源代码的第一行;

(3)包的名称一般为小写,包名要有意义。例如:数学计算包名可以命名“math”,再如,绘图包可以命名“drawing”;

为了使用不在同一个包中的类,需要在java程序使用import关键字导入这个类,前面的例子经常使用Scanner类获取用户的输入,Scanner类包含在Java 核心类库util包中,因此程序要使用Scanner类,就需要导入util包,导入util包语句如下:

import  java.util.*;

该条语句意思是导入Java核心类库util包中的所有类,其中import是导入包关键字,Java.util是指Java核心类库中的util包,*是导入util包中的所有类。

使用实例如下:

//导入Java.util包中的Scanner类

import  Java.util.Scanner;

//导入Java.util包中的Date类

import  Java.util.Date;

//导入Java.net包中的所有类

import  Java.net.*;

在Java代码中,import语句应位于package语句之后,类定义之前,可以有多条import语句。

JDK中常用包介绍

JDK提供了丰富的类库,借助它提供的说明文档,可以方便地解决编程过程中的很多问题。JDK常用的包提供的主要功能如下:

● Java.lang:包含一些Java语言的核心类库,如String、Math、Interger、System和Thread。

● Java.util:包含一些实用工具类,如定义系统特性、日期时间、日历、集合类等。

● Java.io:包含能提供多种输入输出的文件读写类。

● Java.net:包含执行网络相关操作的类。

● Java.sql:Java操作数据库的一些API。

● Java.text:包含了一些用来处理文本、数字和消息的类和接口。

● java.awt:用来构建和管理Java程序图形用户的界面的类。

● Javax.swing:在awt基础上构建的一套新的图形界面类。


■ 知识点拨

同一个包中的类不需要被导入,当代码使用外部包中的类时,需要用import语句导入包含该类的包。

代码使用外部包中的类,另外一个方法是在代码中使用类的完全限定名称。例如,在使用Scanner的代码中,如果省略了导入Scanner的语句,则需要在使用Scanner类的位置使用Java.util.Scanner。

Java编译器默认为所有的Java程序引入了JDK的Java.lang 包中的所有的类。其中定义了一些常用类:System、String、Object、Math等。因此我们可以直接使用这些类,而不必显式引入。但使用其他包中的类时,则必须先引入、后使用。

 


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论