java - 编译时"error: cannot find symbol";我尝试使用的类 "cannot be found"

标签 java compiler-errors cannot-find-symbol test-class

我有一个作业,需要一个初始类(class)和一个单独的项目来测试该类(class)。现在,每次我尝试编译它时,它都会出现以下错误:

package blooddata;

   TestBloodData.java:10: error: cannot find symbol
          BloodData patient1 = new BloodData("AB", "-");
          ^
      symbol:   class BloodData
      location: class TestBloodData
   TestBloodData.java:10: error: cannot find symbol
          BloodData patient1 = new BloodData("AB", "-");
                                   ^
      symbol:   class BloodData
      location: class TestBloodData
    TestBloodData.java:11: error: cannot find symbol
          BloodData patient2 = new BloodData("B", "+");
          ^
      symbol:   class BloodData
      location: class TestBloodData
     TestBloodData.java:11: error: cannot find symbol
          BloodData patient2 = new BloodData("B", "+");
                                   ^
       symbol:   class BloodData
       location: class TestBloodData
      4 errors

实际代码如下。我尝试过谷歌搜索、YouTube 搜索和阅读我的教科书。我很困惑为什么这么说。我尝试过关闭并重新打开 NetBeans,甚至卸载并安装 IDE,但显然没有任何效果。我尝试将项目属性中的主类设置为我正在测试的 BloodData 类(这是大多数建议),但这也不起作用。

package blooddata;

/**
 *
 * @author CaseyPhillips
 */
public class BloodData {

    public String bloodType;
    public String rHFactor;

    public BloodData() 
    {
        bloodType = "O";
        rHFactor = "+";
    }
    public BloodData(String bloodType, String rHFactor)
    {
        this.bloodType = bloodType;
        this.rHFactor = rHFactor;
    }
    public void setBloodType(String bloodType)
    {
        this.bloodType = bloodType;

    }
    public String getBloodType()
    {
        return bloodType;
    }
    public void setRHFactor(String rHFactor)
    {
        this.rHFactor = rHFactor;
    }
    public String getRHFactor()
    {
        return rHFactor;
    }

    public void showBloodType()
    {
        System.out.println("The patient's blood type is " + 
            bloodType + " and their Rh Factor is " + rHFactor);
    }

    public static void main(String[] args) {
        // TODO code application logic here
    }

}

测试驱动程序:

package blooddata;


/*
Author: Casey Phillips
*/
public class TestBloodData 
{
    public static void main(String[] args) 
    {
        BloodData patient1 = new BloodData("AB", "-");
        BloodData patient2 = new BloodData("B", "+");
        patient1.showBloodType();
        patient2.showBloodType();
    }
}

我使用的编译命令是:

Caseys-MacBook-Pro:~ CaseyPhillips$ cd NetBeansProjects/BloodData/src/blooddata
Caseys-MacBook-Pro:blooddata CaseyPhillips$ javac TestBloodData.java
TestBloodData.java:11: error: cannot find symbol
        BloodData patient1 = new BloodData("AB", "-");
        ^
  symbol:   class BloodData
  location: class TestBloodData
TestBloodData.java:11: error: cannot find symbol
        BloodData patient1 = new BloodData("AB", "-");
                                 ^
  symbol:   class BloodData
  location: class TestBloodData
TestBloodData.java:12: error: cannot find symbol
        BloodData patient2 = new BloodData("B", "+");
        ^
  symbol:   class BloodData
  location: class TestBloodData
TestBloodData.java:12: error: cannot find symbol
        BloodData patient2 = new BloodData("B", "+");
                                 ^
  symbol:   class BloodData
  location: class TestBloodData
4 errors

最佳答案

由于您使用的是包,因此您需要将两个类 BloodDataTestBloodData 包含在名为 blooddata 的文件夹中(该文件夹以您的名称命名)包)。

假设文件 BloodData.javaTestBloodData.java 位于名为 blooddata 的文件夹内。 从父文件夹,您应该能够使用 javac 编译驱动程序。

javac blooddata/TestBloodData.java

这将解决您的链接错误。要运行已编译的类文件,您可以也从父文件夹发出以下命令。

java blooddata.TestBloodData

其他人可能可以比我更好地解释为什么必须以这种方式管理包,但我相信这与 java 运行时环境 (JRE) 如何识别属于包一部分的类有关。您不能简单地从包文件夹本身编译/执行。看来您需要从相对于包路径的文件夹进行编译/执行。

编辑 - 为了根据更新的编译命令和路径信息尽可能明确,您需要执行以下操作:

$ cd NetBeansProjects/BloodData/src/
$ javac blooddata/TestBloodData.java

这应该可以解决您的链接错误。然后您可以从同一目录运行代码:

$ java blooddata.TestBloodData

我知道这可能看起来很奇怪,但要点是 - 当您使用 Java 包时,您必须执行相对于包路径的命令,在您的情况下是包含 blooddata 的目录,而不是 blooddata 目录本身。

关于java - 编译时"error: cannot find symbol";我尝试使用的类 "cannot be found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58628987/

相关文章:

compiler-errors - 在reg声明中获取解析错误

java - 基本 Java - 在文本编辑器中编码,无法从不同文件创建新对象,尽管它们位于同一包中 "Cannot find symbol"

python - 如何在 python 的 opencv 3 中构造一个 Rect 对象?

java - 以编程方式添加到自定义 View 持有者的自定义 View 实例具有错误的位置和大小

java - 应用程序已停止-Android studio

c++ - 包含 emscripten header 时如何修复编译错误?

java - 使用另一个类格式化 JTextfields

java - 坐标超出 .setRGB 范围

java - 将文件转换为字节数组时出错。 java.ioFileNotFoundException

c++ - 错误代码 C2451 无法运行基本程序