为什么UserTest.java文件使用javac进行编译会找不到User呢,它们在同一个包下,并且直接使用eclipse可以运行?

为什么UserTest.java文件使用javac进行编译会找不到User呢,它们在同一个包下,并且直接使用eclipse可以运行?

img

img

public class User {
    public String sayHi(String name) {
        return name + ",您好," 
                + "现在时间是:" + new java.util.Date();
    }
}
public class UserTest {
    public static void main(String[] args) {
        User u = new User();
        System.out.println(u.sayHi("孙悟空"));
    }
}

你这里UserTest类是有包的, User类也是一样, javac 命令 编译UserTest,里面的User类没有指定编译路径,默认先从 classpath中找,而User类是 在 day14这个包下的, javac 识别不了,也就报错了;

img

如果两个类都去除 package, 则 javac 命令 编译UserTest,就可以连带 编译 User, 默认包正好是在 classpath下:

img

【以下回答由 GPT 生成】

这个问题的原因是由于编译器无法找到User类所在的路径。在Eclipse中,编译器可以根据项目的构建路径自动找到类文件,但使用javac命令进行编译时,需要手动指定类文件的位置。

为了解决这个问题,您可以按照以下步骤操作:

  1. 确保User类和UserTest类在同一个包下,比如com.example包。

  2. 打开命令行终端或者命令提示符,进入到User和UserTest类所在的根目录。

  3. 使用javac命令编译UserTest.java文件,如下所示:

javac com/example/UserTest.java

注意,命令中的路径应该是UserTest.java的相对路径。

  1. 编译成功后,在同一个目录下会生成一个名为UserTest.class的文件。

  2. 然后再次使用javac命令编译User.java文件,如下所示:

javac com/example/User.java

  1. 编译成功后,在同一个目录下会生成一个名为User.class的文件。

  2. 现在,您可以使用java命令运行UserTest类,如下所示:

java com.example.UserTest

注意,命令中的路径应该是UserTest类的全限定名。

通过以上步骤,您应该能够成功编译并运行UserTest类。

这是一种手动指定类路径的方法,但如果您使用构建工具如Maven或者Gradle管理项目,它们会自动处理类路径的配置,您可以直接使用相应的命令进行编译和运行。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^