gpt4 book ai didi

Java包: Newbie on modifying system default package to a named package

转载 作者:行者123 更新时间:2023-11-30 04:45:25 26 4
gpt4 key购买 nike

我是 java 和包的新手,需要一些帮助来导航它们。目前,我有一个用于 Web 应用程序的正在运行的 java 程序,其中我的所有 .java 和 .class 文件都位于 Linux 服务器上的 myapp/WEB-INF/classes 目录中:

myapp/WEB-INF/classes/MyJavaClass1.class
myapp/WEB-INF/classes/MyJavaClass2.class
myapp/WEB-INF/classes/MyJavaClass3.class

这些文件都不包含 package 的代码,因此我假设正在使用系统默认包。

然后我添加了一个 mytools 目录,并在其中创建了一个新类。

myapp/WEB-INF/classes/mytools/MyToolClass1.class

但是这个新类似乎无法访问 myapp/WEB-INF/classes 目录中的类,除非这些 java 文件包含包名称。所以我的问题是如何将文件从系统默认包(例如未指定包)更改为命名包?

是否应该将 package mypackage; 附加到 MyJavaClass1.java、MyJavaClass2.java 和 MyJavaClass3.java 的第一行,并将 package mypackage.mytools; 附加到 MyToolClass1 .java?

或者,我是否还需要创建一个目录 mypackage ,以便 myapp/WEB-INF/classes/mypackage 并将文件 MyJavaClass1.class 等放置在其中,在执行上述操作之前?

然后,当我编译 .java 文件时,是否在各自的目录中编译每个文件(或者是否需要从顶级目录编译所有文件)?

更新1

如果我只是在 myapp/WEB-INF/classes 中保留 java 文件的默认包(即没有包),并附加:

package mytools;
import MyJavaClass1;

到 MyToolClass1.java 并尝试从 mytools 目录编译 MyToolClass1.java,我收到以下编译错误:

MyToolClass1.java:21: '.' expected
import MyJavaClass1;
^
MyToolClass1.java:21: ';' expected
import MyJavaClass1;
^
2 errors

最佳答案

在java中,包是在类的顶部定义的,正如您所描述的那样。您的代码之所以有效,只是因为所有代码都位于根目录,即没有包。我建议您将所有类移动到一个包中...将它们全部移动到 mytools 目录中,并为每个类添加 package mytools;

有关软件包最佳实践的快速引用,请通读此 package tutorial 。您可能希望通过相关函数打包您的类,这意味着有些类可能会进入 mytools 目录,有些可能会进入 mytools/parse (package mytools.parse;)

关于Java包: Newbie on modifying system default package to a named package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com