概述
《Java编程艺术》章节选登。作者:高永强 清华大学出版社 (即将出版)
12.1 包——package
包是Java提供的文件管理机制。包把功能相似的类,按照Java的名字空间(namespace)命名规范,以压缩文件的方式,储存在指定的文件目录中,达到有效管理和提取文件的目的。在应用软件开发中,所有类都以包储存和管理。
包也是除import之外,另一个可以编写在类之外的语句。我们可以在程序的开始,利用关键字package,将该程序创建成为包中的一个文件。例如:
package com.classes.java;
com.classes.java即代表包名,同时也代表文件目录。因为在创建包文件的指令中,com.jclasses.java指定了生成文件的目录。例如在窗口操作系统中,这个目录即:
C:comclassesjava
包的应用使文件不必储存在相同的目录中。可以想象在具有成千上万个文件的复杂应用程序中,不使用目录组织结构管理文件是不可能的。包文件可以通过import提取,如同在程序的开始用import包括API 类一样,增强了代码的使用度。
包对文件的管理机制还涉及到访问权——即包访问权。Java规定,凡是不标明访问权标识符的类,对象变量,以及方法,都属于包访问权。如:
class PackageClass { //具有包访问权的类
int value; //包访问权对象变量
...
void method() { //包访问权方法
...
}
...
}
我们将在12.1.6小节专门讨论包访问权并总结其他Java访问权问题。
所有流行的Java IDE,例如Eclipse、NetBeans、BlueJ,等等,都以包和项目为基础,管理Java文件。毫无疑问,了解和掌握包的概念和技术在应用软件开发中十分重要。
12.1.1 包命名规范
为了确保包文件名称的唯一性,Java对应用软件开发者,尤其对软件开发公司,在包的命名方面提出如下规范:
互联网地址 包名
FreeSkyTech.com com.freeskytech
Ohlone.edu/faculty/CS cs.faculty.edu.ohlone.usa
例2.作为学习和培训为目的的编程实践,建议使用具有清楚含义的文件目录作为包名。如本书例子中利用:
C:javabookclassesch12
作为储存包文件的目录,而包名为:
ch12
12.1.2 创建包文件
包文件的创建和应用通常有如下两种方式:
1. 创建用来储存生成的字节码文件的目录。Java规定,从总目录开始,至少有3个子目录。例如,如下储存包文件的目录:
C:javabookclassesch12
其中ch12为包名。
2. 在要创建成包文件的程序开始,按照以上目录,加入package语句。即:
package ch12;
public class PackageTest {
public void print() {
System.out.println("Here is message from Package Test ...");
}
}
3. 设立CLASSPATH。其目的是告诉Java编译器以及JVM在哪里可以找到和装载源代码和字节代码文件。根据Java规定,CLASSPATH必须转向比包文件储存目录高一级的目录。如在这个例子中,CLASSPATH应当是:
C:javabookclasses;
以窗口操作系统为例,选择控制面板→系统→高级→环境变量(N)→新建→在变量名窗口输入CLASSPATH→在变量值窗口输入.;C:javabookclasses;→确定→确定。(如果CLASSPATH变量已经存在,则选择编辑→在CLASSPATH的开始输入.;C:javabookclasses;然后按下确定。)
4. 创建储存源代码文件的目录。将源文件和生成的字节码文件分别储存在不同的目录中,以易于管理。如下创建储存源代码文件的目录:
C:javabooksrcch12
5. 将PackageTest.java或者所有要创建包文件的源代码复制到这个目录中。
6. 编译。在操作系统的总目录C:中,输入如下编译指令:
C:javac –d javabookclasses javabooksrcch12PackageTest.java
指令中,–d告诉编译器将生成的字节码文件储存到其后指定的目录中。最后参数指出储存源代码文件的目录。如果这个目录中有多个创建的包文件,可以将文件名修改为*.java。执行这个编译指令后,编译器将把所有生成的.class文件储存到目录C:javabookclassesch 12中。注意这个编译指令与以上各步骤的关系。如果指令不正确,将产生编译错误,或生成的字节文件不会被JVM装载。
也可使用两个子目录作为包名,如:
package ch12.share;
public class PackageTest2 {
...
}
储存包文件的文件目录为:
C:javabookclassesch12share
而CLASSPATH依然为:
C:javabookclasses
注意 在窗口操作系统中,表示子目录的前斜划线\或后斜划线/均为合法。
12.1.3 引入包文件
如同我们引入API包类一样,创建了的包文件,可以用import引入到程序中应用。例如上面的例子:
import ch12.PackageTest1;
import ch12.PackageTest2;
public class PackageTestApp {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1();
myPackage.print();
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
也可以利用:
import ch12.*;
引入包ch12中所有的包类。注意,PackageTestApp.java可以储存在任何目录中编译和运行。
12.1.4 JAR文件
创建和使用包文件的另外一种常用方式是利用Java的JAR文件。JDK的目录jrelibext允许以Java压缩文件,JAR(Java Archive)文件形式,储存自定义包类。任何编程人员都可以在程序中引入这些压缩的包文件,并加以应用。这种方式无需设立CLASSPATH。JAR文件可以包括多个包类,用来提高引入、编译以及装载效率。在编译时,Java编译器将首先自动对引入的包文件解压。
JDK中的指令jar可以用来创建JAR文件。假设有如下两个要创建为JAR文件的演示程序:
package ch12;
public class PackageTest1 {
public void print() {
System.out.println("Here is Package Test 1 message...");
}
}
以及:
package ch12;
public class PackageTest2 {
public void print() {
System.out.println("Here is Package Test 2 message...");
}
}
可按照如下步骤创建和引入JAR文件:
1. 创建储存包文件的目录。与利用CLASSPATH创建包文件目录的要求相同,从总目录开始,必须至少有3个子目录。如:
C:javabookclassesch12
2. 将包文件(源代码文件)复制到以上目录中。
3. 分别编译每个程序。
4. 创建JAR文件。输入如下jar指令:
C:javabookclassesjar cvf ch12.jar ch12*
这个指令在当前目录中产生一个包括子目录所有文件的名为ch12.jar的压缩文件。三个jar指令的选项cvf的含义为:c——创建JAR文件;v——显示创建过程信息;f——跟随的是jar文件名。“*”表示将包括源代码在内的程序都压缩在JAR文件中。也可以利用如下指令只包括字节文件:
C:javabookclassessjar cvf ch12.jar ch12*.class
注意,一般JAR文件名使用小写字母。可以是任何Java合法标识符。
5. 将创建的jar文件拷贝到JDK的子目录jrelibext中。
6. 实现引入。任何程序都可以引入这个JAR文件中的包类。例如:
import ch12.*; //引入所有包类
public class PackageJarTestApp {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1(); //利用引入的包类创建对象
myPackage.print(); //调用其方法
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
如同引入API包类一样,如果只需要import单独的包类,在import中写明具体类名。如:
import ch12.OtherClass;
12.1.5 IDE中的包
几乎所有流行的Java IDE都采用包和项目机制来管理应用程序的编写和开发。从这一章开始,所有举例程序都利用Eclipse的包来储存和管理。
IDE中的包机制为创建和引入包类提供了方便。编程人员不必按照详细操作步骤创建包文件,也不必为引入包类出错而担忧。编程人员只需考虑如何在IDE中设置包。
下面以Eclipse为例,讨论如何在IDE中设置包。其他IDE的设置,可参考相关IDE文件。
假设将上面小节讨论过的PackageTest1.java和PackageTest2.java作为项目Ch12的包文件。因为Eclipse自动生成包文件,首先需要删除两个程序中的package指令。删除后的PackageTest1源代码如下所示:
public class PackageTest1 {
public void print() {
System.out.println("Here is Package Test 1 message...");
}
}
PackageTest2.java与此相同。
Eclipse提供了许多方法设置包。如下列举的是其典型步骤:
1. 创建项目Project。如File→New→Project→Next,输入项目名,如Ch12。按下Finish。
2. 在项目名下,如Ch12,选择File→New→Package,在Name:窗口条中输入包名,如ch12,按下Finish。
3. 在项目Ch12中,创建一个用来储存包类的子目录,例如classes。
4. 将以上两个程序拷贝至子目录classes中。完成包的设置。注意Eclipse自动在程序开始加入package classes;
如下为引入这两个包类的驱动程序:
package ch12;
import classes.*; //引入包classes的所有类,即PackageTest1以及PackageTest2
public class PackageTestApp2 {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1();
myPackage.print();
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
如果把要引入包类的程序,如上例的驱动程序和包类都储存在同一个目录,或包中,如ch12,以上步骤可省略。import 语句则无必要。
12.1 包——package
包是Java提供的文件管理机制。包把功能相似的类,按照Java的名字空间(namespace)命名规范,以压缩文件的方式,储存在指定的文件目录中,达到有效管理和提取文件的目的。在应用软件开发中,所有类都以包储存和管理。
包也是除import之外,另一个可以编写在类之外的语句。我们可以在程序的开始,利用关键字package,将该程序创建成为包中的一个文件。例如:
package com.classes.java;
com.classes.java即代表包名,同时也代表文件目录。因为在创建包文件的指令中,com.jclasses.java指定了生成文件的目录。例如在窗口操作系统中,这个目录即:
C:comclassesjava
包的应用使文件不必储存在相同的目录中。可以想象在具有成千上万个文件的复杂应用程序中,不使用目录组织结构管理文件是不可能的。包文件可以通过import提取,如同在程序的开始用import包括API 类一样,增强了代码的使用度。
包对文件的管理机制还涉及到访问权——即包访问权。Java规定,凡是不标明访问权标识符的类,对象变量,以及方法,都属于包访问权。如:
class PackageClass { //具有包访问权的类
int value; //包访问权对象变量
...
void method() { //包访问权方法
...
}
...
}
我们将在12.1.6小节专门讨论包访问权并总结其他Java访问权问题。
所有流行的Java IDE,例如Eclipse、NetBeans、BlueJ,等等,都以包和项目为基础,管理Java文件。毫无疑问,了解和掌握包的概念和技术在应用软件开发中十分重要。
12.1.1 包命名规范
为了确保包文件名称的唯一性,Java对应用软件开发者,尤其对软件开发公司,在包的命名方面提出如下规范:
- 包名全部用英文小写字母。
- 必须符合Java合法命名语法格式。
- 使用倒写的互联网地址作为包名。如果仍然不能表示包文件名的唯一性时,加入地区性标识符。
- 避免使用Java API包名。例如java.lang、javax.swing等。
互联网地址 包名
FreeSkyTech.com com.freeskytech
Ohlone.edu/faculty/CS cs.faculty.edu.ohlone.usa
例2.作为学习和培训为目的的编程实践,建议使用具有清楚含义的文件目录作为包名。如本书例子中利用:
C:javabookclassesch12
作为储存包文件的目录,而包名为:
ch12
12.1.2 创建包文件
包文件的创建和应用通常有如下两种方式:
- 利用CLASSPATH。
- 利用Java JAR文件。
1. 创建用来储存生成的字节码文件的目录。Java规定,从总目录开始,至少有3个子目录。例如,如下储存包文件的目录:
C:javabookclassesch12
其中ch12为包名。
2. 在要创建成包文件的程序开始,按照以上目录,加入package语句。即:
package ch12;
public class PackageTest {
public void print() {
System.out.println("Here is message from Package Test ...");
}
}
3. 设立CLASSPATH。其目的是告诉Java编译器以及JVM在哪里可以找到和装载源代码和字节代码文件。根据Java规定,CLASSPATH必须转向比包文件储存目录高一级的目录。如在这个例子中,CLASSPATH应当是:
C:javabookclasses;
以窗口操作系统为例,选择控制面板→系统→高级→环境变量(N)→新建→在变量名窗口输入CLASSPATH→在变量值窗口输入.;C:javabookclasses;→确定→确定。(如果CLASSPATH变量已经存在,则选择编辑→在CLASSPATH的开始输入.;C:javabookclasses;然后按下确定。)
4. 创建储存源代码文件的目录。将源文件和生成的字节码文件分别储存在不同的目录中,以易于管理。如下创建储存源代码文件的目录:
C:javabooksrcch12
5. 将PackageTest.java或者所有要创建包文件的源代码复制到这个目录中。
6. 编译。在操作系统的总目录C:中,输入如下编译指令:
C:javac –d javabookclasses javabooksrcch12PackageTest.java
指令中,–d告诉编译器将生成的字节码文件储存到其后指定的目录中。最后参数指出储存源代码文件的目录。如果这个目录中有多个创建的包文件,可以将文件名修改为*.java。执行这个编译指令后,编译器将把所有生成的.class文件储存到目录C:javabookclassesch 12中。注意这个编译指令与以上各步骤的关系。如果指令不正确,将产生编译错误,或生成的字节文件不会被JVM装载。
也可使用两个子目录作为包名,如:
package ch12.share;
public class PackageTest2 {
...
}
储存包文件的文件目录为:
C:javabookclassesch12share
而CLASSPATH依然为:
C:javabookclasses
注意 在窗口操作系统中,表示子目录的前斜划线\或后斜划线/均为合法。
12.1.3 引入包文件
如同我们引入API包类一样,创建了的包文件,可以用import引入到程序中应用。例如上面的例子:
import ch12.PackageTest1;
import ch12.PackageTest2;
public class PackageTestApp {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1();
myPackage.print();
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
也可以利用:
import ch12.*;
引入包ch12中所有的包类。注意,PackageTestApp.java可以储存在任何目录中编译和运行。
12.1.4 JAR文件
创建和使用包文件的另外一种常用方式是利用Java的JAR文件。JDK的目录jrelibext允许以Java压缩文件,JAR(Java Archive)文件形式,储存自定义包类。任何编程人员都可以在程序中引入这些压缩的包文件,并加以应用。这种方式无需设立CLASSPATH。JAR文件可以包括多个包类,用来提高引入、编译以及装载效率。在编译时,Java编译器将首先自动对引入的包文件解压。
JDK中的指令jar可以用来创建JAR文件。假设有如下两个要创建为JAR文件的演示程序:
package ch12;
public class PackageTest1 {
public void print() {
System.out.println("Here is Package Test 1 message...");
}
}
以及:
package ch12;
public class PackageTest2 {
public void print() {
System.out.println("Here is Package Test 2 message...");
}
}
可按照如下步骤创建和引入JAR文件:
1. 创建储存包文件的目录。与利用CLASSPATH创建包文件目录的要求相同,从总目录开始,必须至少有3个子目录。如:
C:javabookclassesch12
2. 将包文件(源代码文件)复制到以上目录中。
3. 分别编译每个程序。
4. 创建JAR文件。输入如下jar指令:
C:javabookclassesjar cvf ch12.jar ch12*
这个指令在当前目录中产生一个包括子目录所有文件的名为ch12.jar的压缩文件。三个jar指令的选项cvf的含义为:c——创建JAR文件;v——显示创建过程信息;f——跟随的是jar文件名。“*”表示将包括源代码在内的程序都压缩在JAR文件中。也可以利用如下指令只包括字节文件:
C:javabookclassessjar cvf ch12.jar ch12*.class
注意,一般JAR文件名使用小写字母。可以是任何Java合法标识符。
5. 将创建的jar文件拷贝到JDK的子目录jrelibext中。
6. 实现引入。任何程序都可以引入这个JAR文件中的包类。例如:
import ch12.*; //引入所有包类
public class PackageJarTestApp {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1(); //利用引入的包类创建对象
myPackage.print(); //调用其方法
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
如同引入API包类一样,如果只需要import单独的包类,在import中写明具体类名。如:
import ch12.OtherClass;
12.1.5 IDE中的包
几乎所有流行的Java IDE都采用包和项目机制来管理应用程序的编写和开发。从这一章开始,所有举例程序都利用Eclipse的包来储存和管理。
IDE中的包机制为创建和引入包类提供了方便。编程人员不必按照详细操作步骤创建包文件,也不必为引入包类出错而担忧。编程人员只需考虑如何在IDE中设置包。
下面以Eclipse为例,讨论如何在IDE中设置包。其他IDE的设置,可参考相关IDE文件。
假设将上面小节讨论过的PackageTest1.java和PackageTest2.java作为项目Ch12的包文件。因为Eclipse自动生成包文件,首先需要删除两个程序中的package指令。删除后的PackageTest1源代码如下所示:
public class PackageTest1 {
public void print() {
System.out.println("Here is Package Test 1 message...");
}
}
PackageTest2.java与此相同。
Eclipse提供了许多方法设置包。如下列举的是其典型步骤:
1. 创建项目Project。如File→New→Project→Next,输入项目名,如Ch12。按下Finish。
2. 在项目名下,如Ch12,选择File→New→Package,在Name:窗口条中输入包名,如ch12,按下Finish。
3. 在项目Ch12中,创建一个用来储存包类的子目录,例如classes。
4. 将以上两个程序拷贝至子目录classes中。完成包的设置。注意Eclipse自动在程序开始加入package classes;
如下为引入这两个包类的驱动程序:
package ch12;
import classes.*; //引入包classes的所有类,即PackageTest1以及PackageTest2
public class PackageTestApp2 {
public static void main(String[] args) {
PackageTest1 myPackage = new PackageTest1();
myPackage.print();
PackageTest2 yourPackage = new PackageTest2();
yourPackage.print();
}
}
如果把要引入包类的程序,如上例的驱动程序和包类都储存在同一个目录,或包中,如ch12,以上步骤可省略。import 语句则无必要。
转载于:https://blog.51cto.com/yqgao/157061
最后
以上就是故意棉花糖为你收集整理的创建和应用Java包文件的两种方式的全部内容,希望文章能够帮你解决创建和应用Java包文件的两种方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复