Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。本文主要介绍Java 包(package)

1、Java 包(package)

Java中的软件包用于区别类名的命名空间。可以理解为就是文件夹,并且使用了树形目录的存储方式。 我们使用软件包来避免名称冲突,并编写更好的可维护代码。 软件包分为两类:

  • 内置软件包(来自Java API的软件包)
  • 用户定义的软件包(创建自己的软件包)

2、内置包

Java API是Java开发环境中包含的,可免费使用的预编写类的库。

该库包含用于管理输入,数据库编程等的组件。完整列表可以在Oracle网站上找到:https://docs.oracle.com/javase/8/docs/api/

该库分为包和类。可以导入单个类(以及其方法和属性),也可以导入包含所有属于指定包的类的整个包。

要使用库中的类或包,需要使用import关键字导入:

语法

import package.name.Class;   // 导入单个类
import package.name.*;   // 导入整个包

3、使用import导入类

如果要导入使用的类,例如,Scanner类用于获取用户输入,导入使用以下代码:

例如:

import java.util.Scanner;

在上面的示例中,java.util是一个包,而Scannerjava.util包的类。

要使用Scanner类,需要创建该类的对象,并使用Scanner类文档中提供的任何可用方法。在我们的示例中,我们将使用nextLine()方法,该方法用于读取一行:

例如:

使用Scanner类获取用户输入:

import java.util.Scanner;

class MyClass {
  public static void main(String[] args) {
    Scanner myObj = new Scanner(System.in);
    System.out.println("输入 username");

    String userName = myObj.nextLine();
    System.out.println("Username 是: " + userName);
  }
}

4、使用import导入包

有很多软件包可供选择。在前面的示例中,我们使用了java.util包中的Scanner类。该软件包还包含日期和时间工具,随机数生成器和其他实用程序类。

要导入整个包,需要使用星号(*)。 以下示例将导入java.util包中的所有类:

例如:

import java.util.*;

5、用户自定义包

要创建自己的包,需要了解Java使用文件系统目录来存储它们。就像计算机上的文件夹一样:

例如:

    
└── root
  └── mypack
    └── MyPackageClass.java

要创建包,请使用package关键字:

MyPackageClass.java

package mypack;
class MyPackageClass {
  public static void main(String[] args) {
    System.out.println("This is my package!");
  }
}

将文件另存为MyPackageClass.java,并进行编译:

C:\Users\cjavapy> javac MyPackageClass.java

然后编译该包:

C:\Users\cjavapy> javac -d . MyPackageClass.java

这将强制编译器创建“mypack”包。-d关键字指定保存类文件的位置。可以使用任何目录名称,例如,c:/user(windows),或者,如果要将软件包保留在同一目录中,则可以使用点号.注意:软件包名称应使用小写字母,以避免与类名称冲突。

当我们在上面的示例中编译软件包时,创建了一个新文件夹,称为“mypack”。

要运行MyPackageClass.java文件,请编写以下内容:

C:\Users\cjavapy> java mypack.MyPackageClass

输出将是:

This is my package!

6、设置 CLASSPATH 系统变量

用下面的命令显示当前的CLASSPATH变量:

  • Windows 平台(DOS 命令行下):C:\> set CLASSPATH
  • UNIX 平台(Bourne shell 下):echo $CLASSPATH

删除当前CLASSPATH变量内容:

  • Windows 平台(DOS 命令行下):C:\> set CLASSPATH=
  • UNIX 平台(Bourne shell 下):unset CLASSPATH; export CLASSPATH

设置CLASSPATH变量:

  • Windows 平台(DOS 命令行下): C:\> set CLASSPATH=C:\users\jack\java\classes
  • UNIX 平台(Bourne shell 下):CLASSPATH=/home/jack/java/classes; export CLASSPATH