Java教程-详解 Java Package 包

Java中的包是一种将相似类型的类、接口和子包组织在一起的机制。
Java包可以分为两种形式:内置包和用户自定义包。
内置包包括java、lang、awt、javax、swing、net、io、util、sql等许多包。
在这里,我们将详细学习如何创建和使用用户自定义包。
Java包的优势
- 分类和组织: Java包用于对类和接口进行分类和组织,使代码更易于维护和管理。
- 访问保护: Java包提供了访问保护机制,通过使用访问修饰符(如public、protected、private)来控制包中成员的可见性。
- 命名空间管理: Java包消除了命名冲突,不同的包中可以使用相同的类名,因为它们存在于不同的命名空间中,避免了命名冲突的问题。
java包的简单例子
package关键字用于在 java 中创建包。
//另存为Simple.java
package mypack;
public class Simple{
public static void main(String args[]){
System.out.println("Welcome to package");
}
}
如何编译java包
如果您没有使用任何 IDE,则需要遵循以下语法:
javac -d directory javafilename
例如:
javac -d . Simple.java
-d 开关指定放置生成的类文件的目的地。您可以使用任何目录名称,例如 /home(在 Linux 的情况下)、d:/abc(在 Windows 的情况下)等。如果您想将包保存在同一目录中,您可以使用 . (点)。
如何运行java包程序
您需要使用完全限定名称(例如 mypack.Simple 等)来运行该类。
编译: javac -d . Simple.java
运行:java mypack.Simple
输出:
Welcome to package
-d 是一个开关,它告诉编译器将类文件放在哪里,即它代表目的地。这 。代表当前文件夹。
如何从另一个包访问包?
可以通过三种方式从包外部访问包。
- 导入包。*;
- 导入包.类名;
- 完全合格的名称。
1) 使用包名。*
如果你使用 package.* 那么这个包的所有类和接口都可以访问,但不能访问子包。
import 关键字用于使当前包可以访问另一个包的类和接口。
导入包名的包示例。*
//通过A.java保存
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//通过B.java保存
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
输出:
Hello
2)使用包名.类名
如果您导入 package.classname 则只能访问此包的声明类。
import package.classname 的包示例
//通过A.java保存
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//通过B.java保存
package mypack;
import pack.A;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
输出:
Hello
3)使用完全限定名称
在使用完全限定名称时,您可以直接访问指定包中声明的类,而无需导入该包。但是每次访问类或接口时都需要使用完全限定名。
这种方式通常在两个包中存在具有相同类名的情况下使用,例如java.util
和java.sql
包中都有一个名为Date
的类。
导入完全限定名称的包示例
//通过A.java保存
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//通过B.java保存
package mypack;
class B{
public static void main(String args[]){
pack.A obj = new pack.A(); //使用全限定名
obj.msg();
}
}
输出:
Hello
注意:如果您导入一个包,则不会导入子包。
如果您导入一个包,则该包的所有类和接口都将被导入,子包的类和接口除外。因此,您还需要导入子包
注意:程序的顺序必须先打包再导入再类。
java中的子包
在Java中,包中的包被称为子包。通过创建子包,可以进一步对包进行分类和组织。
例如,Sun Microsystems定义了一个名为java
的包,其中包含许多类,如System
、String
、Reader
、Writer
、Socket
等。这些类代表特定的功能组,例如Reader
和Writer
类用于输入/输出操作,Socket
和ServerSocket
类用于网络通信等。因此,Sun Microsystems将java
包进一步细分为lang
、net
、io
等子包,并将与输入/输出相关的类放在io
包中,将Server
和ServerSocket
类放在net
包中,以此类推。
创建包的命名规范是基于域名、公司和包的名称。例如,com.javatpoint.bean
或org.sssit.dao
。这样的命名约定可以确保包的唯一性和易于理解的包结构。
分包示例
package com.javatpoint.core;
class Simple{
public static void main(String args[]){
System.out.println("Hello subpackage");
}
}
编译: javac -d . Simple.java
运行: java com.javatpoint.core.Simple
输出:
Hello subpackage
如何将类文件发送到另一个目录或驱动器?
有一个场景,我想把A.java源文件的class文件放在c:盘的classes文件夹下。例如:
//另存为Simple.java
package mypack;
public class Simple{
public static void main(String args[]){
System.out.println("Welcome to package");
}
}
编译:
e:sources> javac -dc:classes Simple.java
运行:
要从 e:source 目录运行此程序,您需要设置类文件所在目录的类路径。
e:sources> set classpath=c:classes;.;
e:sources> java mypack.Simple
通过java的-classpath开关运行这个程序的另一种方法:
-classpath 开关可以与 javac 和 java 工具一起使用。
要从 e:source 目录运行此程序,您可以使用 java 的 -classpath 开关,告诉在哪里寻找类文件。例如:
e:sources> java -classpath c:classes mypack.Simple
输出:
Welcome to package
加载类文件或 jar 文件的方法
加载类文件有临时和永久两种方法。
暂时的
- 通过在命令提示符中设置类路径
- 通过 -classpath 开关
永恒的
- 通过在环境变量中设置类路径
- 通过创建包含所有类文件的 jar 文件,并将 jar 文件复制到 jre/lib/ext 文件夹中。
规则:一个java源文件中只能有一个public类,并且必须以public类名保存。
//另存为C.java 否则编译时出错
class A{}
class B{}
public class C{}
如何将两个公共类放在一个包中?
如果你想把两个公共类放在一个包中,有两个包含一个公共类的java源文件,但保持包名相同。例如:
//另存为A.java
package javatpoint;
public class A{}
//另存为B.java
package javatpoint;
public class B{}