为什么在从另一个类创建对象时,我在 java 中看到“找不到符号错误”?

Why am I seeing the "cannot find symbol error" in java when creating an object from another class?

提问人:user9812664 提问时间:6/6/2023 最后编辑:Jim Garrisonuser9812664 更新时间:6/7/2023 访问量:539

问:

这是我名为 Revenue 的主要类,我正在尝试调用与此类相同的目录中的辅助类,并且也在同一包中

package Hotel;

//import java.util.*;

public class Revenue {
    String Name;
    
    Revenue()
    {
        Name="";
    }
    public void Guest() 
    {
        
        System.out.println("Revenue Guest. ");
        Persons x = new Persons(); //Here's where the error is actually occuring
        System.out.println("Guest name:" + x.name() );  
        
    }
    public static void main(String args[])
    { 
        System.out.println("Revenue main.");
        Revenue rev = new Revenue();
        rev.Guest();
    }
}

现在下一部分是二级类

package Hotel;

public class Persons {
    String firstName[] = {"Adam","Alex", "Steve", "Sira"};
 
    public Persons()
    {

    }
    public String name() {
        System.out.println("Persons name");
        java.util.Random r = new java.util.Random();
        String name = firstName[r.nextInt(firstName.length)];
        return name; 
    }
    public static void main(String[] args)
    {
        Persons n = new Persons();
        System.out.println(n.name());
    }
}//class

是的,它通过 vs code(Redhat java 之类的东西)在调试模式下工作正常。但是当我尝试在 cmd 中执行 javac Revenue.java 或 java Revenue.java 时,它显示这样的错误。

Revenue.java:18: error: cannot find symbol
        Persons x = new Persons();
        ^
  symbol:   class Persons
  location: class Revenue
Revenue.java:18: error: cannot find symbol
        Persons x = new Persons();
                        ^
  symbol:   class Persons
  location: class Revenue
2 errors
error: compilation failed

已经整整 24 小时了,但我无法弄清楚这里有什么问题:(

我尝试创建一个名为 revenue 的程序,该程序将从另一个名为 person 的类中提取人名(只是为了将来扩展 person 类)。在 BlueJ 中,它似乎运行良好,没有任何错误,但最近我切换到 cmd 和 vs 代码,在这里我被困在这段代码中,它不会让我从另一个类调用方法。

Java 对象 OOP 方法 cannot-find-symbol

评论

0赞 Seb Perp 6/6/2023
转到“hotel”文件夹的父级。然后是“javac hotel/Revenue.java”
0赞 John Bollinger 6/6/2023
Java 编译器使用类的完全限定名称来查找它们或其源代码。包名映射到目录树,类名映射到文件名。要从命令行进行编译,请确保包含两个源的目录已命名为 ,然后从其父目录运行 。Hoteljavac Hotel/Revenue.java
0赞 user9812664 6/6/2023
我尝试了这种方法,然后尝试了java Hotel/Revenue.class和java Revenue.class(进入酒店目录)。两者都显示错误 java .\Revenue.class 错误:找不到或加载主类 .\Revenue.class 由以下原因引起:java.lang.ClassNotFoundException:/\Revenue/class
0赞 John Bollinger 6/6/2023
成功编译后,您可以通过其完全限定的类运行它。假设您仍然在编译的同一目录中,则该命令将是 .java Hotel.Revenue
0赞 Dave Newton 6/6/2023
切线:如果 Persons 代表一个人(看起来),则应将其命名为 Person(单数)以避免混淆。

答:

0赞 Raushan Kumar 6/7/2023 #1

只需尝试编译和执行命令即可。它应该有效。java className.javajava Persons.java

enter image description here