Java &引用;错误:找不到符号";编写时;“我正在尝试使用的类”;找不到“;

Java &引用;错误:找不到符号";编写时;“我正在尝试使用的类”;找不到“;,java,compiler-errors,cannot-find-symbol,test-class,Java,Compiler Errors,Cannot Find Symbol,Test Class,我有一个作业需要一个初始类和一个单独的项目来测试该类。现在,每次我尝试编译它时,它都会给我以下错误: package blooddata; TestBloodData.java:10: error: cannot find symbol BloodData patient1 = new BloodData("AB", "-"); ^ symbol: class BloodData location: class Test

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

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
实际代码如下。我试过谷歌、youtubing和阅读我的课本。我真搞不懂它为什么这么说。我尝试过关闭和重新打开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

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

假设文件
BloodData.java
TestBloodData.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
目录本身。

看起来您缺少导入,但是如果它们在同一个包中,则不需要从
TestBloodData
导入
BloodData
。您是如何编译代码的?请提供您正在使用的开发环境和编译器。如果您使用的是
javac
之类的工具,请提供compile命令。我在NetBeans IDE中使用了终端,并且尝试使用shell,得到了相同的结果。ByxOrth BloodData类编译得很好,但是TestBloodData不想合作。
BloodData
类编译是因为它不包含来自包
BloodData
的任何外部引用文件。您遇到的错误是链接错误。由于您的编译方法不正确,因此对编译源之外的类的引用导致了错误。请重读我的答案。我仍然得到同样的答案errors@CaseyPhillips您需要从
blooddata
的父文件夹执行
javac
命令-根据您的示例,它是friggin工作的
NetBeansProjects/blooddata/src/
!!!你太棒了,非常感谢你@CaitLAN Jenner@我很高兴你的问题已经解决了。我希望您在此过程中了解了一些有关Java包的新知识。不要忘记接受答案,以便在将来帮助有同样问题的人。