Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java创建包_Java_Package - Fatal编程技术网

用Java创建包

用Java创建包,java,package,Java,Package,这里有人能帮我拿包裹吗。我已经了解了软件包的工作原理 如何导入它们以及如何使用package关键字创建它们。目录和目录是如何工作的。什么是类路径以及如何设置它 但是有一件事我无法得到,那就是如果我想创建一个包并在类路径中添加基目录的位置,那么基目录中应该有什么 它是.java文件还是.class文件,或者两者都是,或者叫做.jar文件的东西 我也不知道jar格式是什么。包是类名的唯一名称空间。它可以防止程序之间和库之间的冲突 例如,如果您创建了一个名为电子表格的类,其他几个人也创建了一个名为电子

这里有人能帮我拿包裹吗。我已经了解了软件包的工作原理

如何导入它们以及如何使用package关键字创建它们。目录和目录是如何工作的。什么是类路径以及如何设置它

但是有一件事我无法得到,那就是如果我想创建一个包并在类路径中添加基目录的位置,那么基目录中应该有什么

它是.java文件还是.class文件,或者两者都是,或者叫做.jar文件的东西


我也不知道jar格式是什么。

包是类名的唯一名称空间。它可以防止程序之间和库之间的冲突

例如,如果您创建了一个名为
电子表格
的类,其他几个人也创建了一个名为
电子表格
的类,并且由于某些原因,所有这些类在运行时都可用,则只能加载一个。(事实上比这更复杂,但我的陈述对大多数常见情况都是正确的。)

但是,如果您的类名为
com.kataria.Spreadsheet
,则不太可能与任何其他类发生冲突,因为它们不太可能具有该包名称

包名称是类名的一部分。Java没有名为
List
的类,但Java有名为
Java.util.List
的类。
import
语句只是编译器的简写<代码>导入java.util.List告诉编译器,“每次我写
List
,实际上是指
java.util.List

由于类名的最后一部分(称为简单名称)只是一个简写,因此两个类
java.util.List
java.awt.List
是不同的类。他们之间没有冲突。(但是,如果出于某种原因,您想同时导入这两个文件,这将是一个问题,因为编译器不知道代码中的
List
本身是java.util.List还是java.awt.List的缩写。)

为了实现一致性,Java要求每个(公共的、顶级的)类都位于一个与其名称和包完全匹配的文件中:

  • 必须在名为java/util/List.java的文件中定义java.util.List
  • 必须在名为com/kataria/Spreadsheet.java的文件中定义com.kataria.Spreadsheet
  • 必须在名为com/example/ai/wopr/Brain.java的文件中定义com.example.ai.wopr.Brain
  • 等等
类似地,.class文件必须具有相同的命名和目录结构:

  • 必须将java.util.List类编译为名为java/util/List.class的文件
  • 必须将com.kataria.Spreadsheet类编译为名为com/kataria/Spreadsheet.class的文件
  • com.example.ai.wopr.Brain类必须编译成一个名为com/example/ai/wopr/Brain.class的文件
  • 等等
搜索路径是一个非常古老的操作系统概念,远远早于Java。所有Windows和Unix系统都使用它来定位命令行上的程序,以及定位可加载的软件库

搜索路径是目录的有序列表。输入命令时,终端环境(shell)会在搜索路径中的每个目录中查找该命令

类似地,Java类路径最初是目录列表。如果输入命令
javacom.kataria.Spreadsheet
,它将在类路径中指定的每个目录中查找com/kataria/Spreadsheet.class文件

不久之后,Java类路径条目被允许是.zip文件或.jar文件。尽管它们是单个归档文件,而不是目录,但此类归档中的条目必须遵守相同的规则:回到上一个示例,类路径中具有com/kataria/Spreadsheet.class条目的第一个.jar文件将是运行时加载类的源

jar文件实际上是一个zip文件,包含不同的扩展名和一些特定于Java的特殊条目。与复制一堆文件相比,这是交付Java程序或库的简单方法。(而且它是压缩的,因此占用的空间更少,可以更快地从磁盘加载。)

要运行Java程序时,通常在命令行上设置类路径:

java -cp /home/kataria/my-spreadsheet.jar:/opt/javafx/lib/javafx.base.jar com.kataria.Spreadsheet

您还可以设置名为
CLASSPATH
的环境变量;这是基于这样一个事实,即原始系统搜索路径已使用(并将继续使用)“PATH”和“LD_LIBRARY_PATH”等环境变量。我不建议设置类路径,因为它将导致您的程序只在一个特定环境中运行。该程序不会在任何其他计算机上运行,除非该用户还记得设置其CLASSPATH变量。

如果您还是java新手,为什么不使用ide(例如:eclipse)?它将为您处理所有枯燥的编译问题。我想说,从ide开始会更容易。但是你可以把包想象成一个文件夹,里面有类stored@DavidAlmeida我正在使用VSCode,我尝试在基本文件夹中创建不同的文件夹,并尝试将类从一个文件夹导入另一个文件夹。但是为了做到这一点,我刚刚使用了其他目录中的.java文件,它工作得非常好。现在我在想,如果我想做一个包裹,我需要做什么。顺便说一句,谢谢你的回复。或者,与其让IDE帮你做这件事,不如看看Java教程?关于文件结构/导入的内容很多。如果我看起来没有尝试进行研究并投入精力,请向大家道歉,但我已经被软件包困了至少4天了,现在这让我很难受。我了解得最多,但这是我最后一件没有得到的东西。我只想完成这个主题,然后继续讨论接口、异常、I-o流和多线程。我的意思是,我有很多工作要做,但剩下的时间非常少