📜  Java package

📅  最后修改于: 2020-09-25 14:45:27             🧑  作者: Mango

Java包

Java软件包是一组类似类型的类,接口和子软件包。

java中的程序包可以分为两种形式,内置程序包和用户定义程序包。

有许多内置软件包,例如java,lang,awt,javax,swing,net,io,util,sql等。

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

Java包的优势

1)Java软件包用于对类和接口进行分类,以便可以轻松维护它们。

2)Java包提供访问保护。

3)Java包消除了命名冲突。

Java包的简单示例

package关键字用于在Java中创建一个包。

//save as 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等来运行该类。

To Compile: javac -d . Simple.java

To Run: java mypack.Simple

-d是一个开关,告诉编译器把类文件放在哪里,也就是说,它代表目标。的。表示当前文件夹。

如何从另一个包访问包?

有三种从包装外部访问包装的方法。

  • 进口包裹。*;
  • 导入package.classname;
  • 全限定名称。

1)使用软件包名称

如果使用package。*,则可以访问此包的所有类和接口,但不能访问子包。

import关键字用于使当前程序包可以访问另一个程序包的类和接口。

导入软件包名称的软件包示例。*

//save by A.java  
package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.*;  
  class B{  
  public static void main(String args[]){  
   A obj = new A();  
   obj.msg();  
  }  
}  

2)使用packagename.classname

如果导入package.classname,则只能访问此包的声明的类。

通过导入package.classname打包的示例

//save by A.java  
  package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.A;  
  class B{  
  public static void main(String args[]){  
   A obj = new A();  
   obj.msg();  
  }  
}  

3)使用标准名称

如果使用完全限定的名称,则只能访问此程序包的声明的类。现在,无需导入。但是,每次访问类或接口时,都需要使用完全限定的名称。

通常在两个包具有相同的类名时使用,例如java.util和java.sql包包含Date类。

导入完全限定名称的包装示例

//save by A.java  
package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
class B{  
  public static void main(String args[]){  
   pack.A obj = new pack.A();//using fully qualified name  
   obj.msg();  
  }  
}  

注意:如果导入软件包,则不会导入子软件包。

如果导入包,则将导入该包的所有类和接口,但不包括子包的类和接口。因此,您还需要导入子包。

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

Java中的子包

包内的包称为子包。应该创建它以对软件包进行进一步分类。

让我们举个例子,SunMicrosystem定义了一个名为java的包,其中包含许多类,例如System,String,Reader,Writer,Socket等。这些类表示一个特定的组,例如Reader和Writer类用于输入/输出操作,Socket和ServerSocket。类用于网络等。因此,Sun将Java包细分为lang,net,io等子包,并将与Input/Output相关的类放在io包中,将Server和ServerSocket类放在net包中,依此类推。

定义包的标准是domain.company.package,例如com.javatpoint.bean或org.sssit.dao。

子包示例

package com.javatpoint.core;  
class Simple{  
  public static void main(String args[]){  
   System.out.println("Hello subpackage");  
  }  
}  

To Compile: javac -d . Simple.java

To Run: java com.javatpoint.core.Simple

如何将类文件发送到另一个目录或驱动器?

有一种情况,我想将A.java源文件的类文件放在c:驱动器的classes文件夹中。例如:

//save as Simple.java  
package mypack;  
public class Simple{  
 public static void main(String args[]){  
    System.out.println("Welcome to package");  
   }  
}  

编译:

e:\sources>javac-dc:\classesSimple.java

运行:

To run this program from e:\source directory, you need to set classpath of the directory where the class file resides.

e:\sources> set classpath=c:\classes;.;

e:\sources> java mypack.Simple

通过Java的-classpath开关运行该程序的另一种方式:

-classpath开关可与javac和java工具一起使用。

要从e:\source目录运行此程序,可以使用java的-classpath开关来告诉要在哪里查找类文件。例如:

e:\sources>java-classpathc:\classesmypack.Simple

加载类文件或jar文件的方法

有两种加载类文件的方法,临时的和永久的。

  • 临时
    • 通过在命令提示符下设置类路径
    • 通过-classpath开关
  • 常驻
    • 通过在环境变量中设置类路径
    • 通过创建包含所有类文件的jar文件,并将jar文件复制到jre / lib / ext文件夹中。

规则:Java源文件中只能有一个公共类,并且必须使用公共类名称保存它。

//save as C.java otherwise Compilte Time Error  
  class A{}  
class B{}  
public class C{}  

如何将两个公共类放在一个包中?

如果您想在一个包中放置两个公共类,请使用包含一个公共类的两个java源文件,但保持包名相同。例如

//save as A.java  
  package javatpoint;  
public class A{}  
//save as B.java  
  package javatpoint;  
public class B{}