Java用户定义的软件包
用户定义的包是由Java程序员开发的包,以简化Java程序员的任务,以保留常用的类,接口和子包。
任何类或者界面通常由许多Java程序员使用Class或者接口必须放在包中。
语法:
package pack1[.pack2[.pack3......packn].....]];
其中包是用于创建用户定义包的关键字,Pack1表示上包和pack2到packn表示子包。
例如:
package p1; // 语句1 package p1.p2; // 语句2
语句1和语句2称为包语句。
开发包的步骤:
- 选择相应的软件包名称,包名称必须是Java有效变量名称,我们已显示,确保包语句必须是第一个可执行语句。
- 选择适当的类名或者接口名称,并且其修改器必须公开。
- 类的构造函数必须公开。
- 类名或者接口名称方法的修饰符必须是公开的。
- 在任何时候,我们都应该将类或者接口放在包中,并将文件名作为包含扩展名.java的类名或者接口名称。
例如:
//Test.java package tp; public class Test { public Test () { System.out.println ("TEST - DEFAULT CONSTRUCTOR"); } public void show () { System.out.println ("TEST - SHOW"); } } //ITest.java package tp; public interface ITest { void disp (); }
编译包的语法:
javac -d . filename.java
例如:
javac -d . Test.java
其中-d是一个选项或者开关,它给出了JVM的指示,该指示转到test.java程序拍摄包名称,并且在目录中创建了一个包名称,test.java中没有出现错误。
当test.java没有包含我们获得测试的任何错误。
类文件和它将自动复制到最近创建的当前目录中,即,TP(包名称)。
无法执行上述程序,因为它不包含任何主要方法。
包是类,接口和子包的集合。
子包依次划分为类,接口,子包等。
了解Java的只是了解各种包。
默认情况下,为每个java程序导入一个预定义的包,其名称是java.lang.*。
每当我们开发任何Java程序时,它可能包含许多用户定义的类和用户定义的接口。
如果我们不使用任何包名称来放置用户定义的类和接口,JVM将假设其自己的包名为noname包。
在Java中,我们有两种类型的包它们是预定义或者内置或者内置或者核心包和辅助或者辅助或者自定义定义包。
Java预定义包
预定义软件包是由Sun Micro Systems开发的包,并作为JDK(Java开发套件)的一部分提供,以简化Java程序员的任务。
说明:
java的核心包是从java开始的(例如:java.lang.*)和java的高级包都是从javax开始的(例如:java.sql.*)
规则:
每当我们创建用户定义的包语句作为Java程序的一部分时,我们必须使用包语句作为第一个可执行语句。
说明:
每当我们开发任何Java程序时,它都包含'n'类和接口。
由程序员开发的每个类和接口必须属于包装(根据行业标准)。
如果程序员未保留包中的类别和接口,则JVM将假设其自己的包名为Noname包。
Noname包仅在程序完成之前仅适用于有限的时间。
Java预定义包的类型:
作为J2SE的一部分,我们拥有九个预定义包,如下表所示:
包 | 说明 |
---|---|
java.lang.* | 此包用于实现从字符串到基本数据的数据转换等语言功能,将结果显示为控制台,获取垃圾收集器。这是为每个默认导入每个Java程序而导入的包。 |
java.io.* | 此包用于开发文件处理应用程序,例如,以读取或者写入模式打开文件,读取或者写入数据等。 |
Java.awt.*(抽象窗口工具包) | 此包用于开发GUI(图形单元接口)组件,如按钮,复选框,滚动框等 |
java.awt.Event.* | 事件是AWT包的子包。此包用于为GUI组件提供功能,例如,当单击按钮或者选中复选框时,滚动框垂直或者水平调整。 |
java.applet.* | 此包用于开发面向浏览器的应用程序。换句话说,此包用于开发分布式程序。 applet是一个在www或者浏览器的上下文中运行的Java程序。 |
java.net.* | 此包用于开发客户端服务器应用程序。 |
java.util.* | 此包用于在Java或者J2EE中开发质量或者可靠的应用程序。此包包含各种类和接口,可提高J2ME应用程序的性能。此包也称为集合框架(集合框架是将类似或者不同类型对象分组成单个对象的标准化机制。此单个对象称为集合对象)。 |
java.text.* | 此包用于在日常业务运营日常格式化日期和时间。 |
java.lang.reflect.* | 反映是郎包的子包。此包基本上用于研究关于类或者接口的运行时信息。运行时信息表示类或者接口的数据成员,类的构造函数,类或者接口的方法类型。 |
java.sql.* | 此包用于从数据库中检索数据并对数据库执行各种操作。 |
如何在另一个Java程序中使用包类和接口:
为了在Java中引用包类和接口,我们有两种方法,它们使用导入语句并使用完全限定的名称方法。
使用Import导入语句:
导入是一个关键字,它用于同时导入单个类或者接口或者一组类和界面。
语法-1:
Import pack1 [.pack2 [.........[.packn]]].*;
例如:
Import p1.*; ---1 Import p1.p2.*; ---2 Import p1.p2.p3.*; ---3
当语句1正在执行时,我们可以导入或者我们只能访问包P1的所有类和接口,而不是其子包P2和P3类和接口。
当语句2正在执行时,我们只能导入包P2的类和接口,而不是P1和P3类和接口。
当语句3正在执行时,我们只能导入包P3的类和接口,而不是P1和P2类和接口。
语法-2:
Import pack1 [.pack2 [........[.packn]]].class name/interface name;
例如:
Import p1.c1; ---4 Import p1.p2.c3; ---5
当语句4正在执行时,可以仅导入C1类的包P1,但不是P1封装,P2包和P3包的其他类和接口。
Java包示例
Import approach: import tp.Test; class PackDemo { public static void main (String [] args) { Test t1=new Test (); t1.show (); } };
当我们编译上述程序时,我们得到以下错误"包TP不存在"。
为避免上述错误,必须将类路径设置为。
,设置classpath =%classpath%;。
这是导入语句的另一种方法:
p1.c2 o2=new p1.c2 (); p1.p2.p3.c4 o4=new p1.p2.p3.c4 (); p1.p2.i3 o3=new p1.p2.p3.c4 ();
示例
class PackDemo { public static void main (String [] args) { tp.Test t1=new tp.Test (); t1.show (); } };
说明:
- 每当我们开发用户定义的软件包时,要在某些其他程序中使用用户定义的软件包的类和接口,我们必须在使用之前设置类路径。
- 为了设置预定义包的类路径,我们必须使用以下语句:d:\core \ set classpath = c:\program files \ java \ jdk1.5.0 \ lib \ rt.jar;.; [rt.jar包含预定义类的所有.class文件,该文件被Sun Micro Systems作为预定义包端口提供的。]
当两个类或者接口属于同一包时,并且如果他们想引用这些类或者接口,则不需要由其包名称引用。
例如:
//I1.java //javac -d . I1.java package ip; public interface I1 { public void f1 (); public void f2 (); }; //C01.java //javac -d . C01.java package cp; public abstract class C01 implements ip.I1 { public void f1 () { System.out.println ("F1 - C01"); } }; //C02.java //javac -d . C02.java package cp; public class C02 extends C01 { public void f2 () { System.out.println ("F2 - C02"); } public void f1 () { super. f1 (); System.out.println ("F1 - C02 - OVER RIDDEN"); } }; //PackDemo.java //javac PackDemo.java import ip.I1; class PackDemo { public static void main (String [] args) { System.out.println ("CP.C02"); cp.C02 o2=new cp.C02 (); o2.f1 (); o2.f2 (); System.out.println ("CP.C01"); cp.C01 o1=new cp.C02 (); o1.f1 (); o1.f2 (); I1 io; io=o1; //new cp.C02 (); io.f1 (); io.f2 (); } };
为了运行上面的程序,我们必须相对于包名称运行。
编译
javac -d . PackDemo1.java
运行
java mp.PackDemo1 或者 java mp/PackDemo1