Java中的是一种将相似类型的类、接口和子包组织在一起的机制。

Java包可以分为两种形式:内置包和用户自定义包。

内置包包括java、lang、awt、javax、swing、net、io、util、sql等许多包。

在这里,我们将详细学习如何创建和使用用户自定义包。

Java包的优势

  1. 分类和组织: Java包用于对类和接口进行分类和组织,使代码更易于维护和管理。
  2. 访问保护: Java包提供了访问保护机制,通过使用访问修饰符(如public、protected、private)来控制包中成员的可见性。
  3. 命名空间管理: Java包消除了命名冲突,不同的包中可以使用相同的类名,因为它们存在于不同的命名空间中,避免了命名冲突的问题。

1.jpg

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. 导入包。*;
  2. 导入包.类名;
  3. 完全合格的名称。

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.utiljava.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

注意:如果您导入一个包,则不会导入子包。

如果您导入一个包,则该包的所有类和接口都将被导入,子包的类和接口除外。因此,您还需要导入子包

注意:程序的顺序必须先打包再导入再类。

2.jpg

java中的子包

在Java中,包中的包被称为子包。通过创建子包,可以进一步对包进行分类和组织。

例如,Sun Microsystems定义了一个名为java的包,其中包含许多类,如SystemStringReaderWriterSocket等。这些类代表特定的功能组,例如ReaderWriter类用于输入/输出操作,SocketServerSocket类用于网络通信等。因此,Sun Microsystems将java包进一步细分为langnetio等子包,并将与输入/输出相关的类放在io包中,将ServerServerSocket类放在net包中,以此类推。

创建包的命名规范是基于域名、公司和包的名称。例如,com.javatpoint.beanorg.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文件夹下。例如:

3.jpg

//另存为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{}  

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想