1

这段代码编译得很好:

人.java

package people;

class Person{
    private String name;
    private int age;

public Person(String name, int age){
    this.name = name;
    this.age = age;

}

public String getName(){
    return name;
}

public void setName(String name){
    this.name = name;
}

public int getAge(){
    return age;
}

public void setAge(int age){
    this.age = age;
}

}

这不会:

控制器.java

package people;
public class controller{
    public static void main (String[] args){

        Person mark = new Person();
        mark.setName("Mark");
        mark.setAge(24);

    }
}

我收到此编译错误:

C:\Program Files\Java\jdk1.8.0_66\classes\controller.java:7: error: cannot find symbol
        Person mark = new Person();
        ^
  symbol:   class Person
  location: class controller
C:\Program Files\Java\jdk1.8.0_66\classes\controller.java:7: error: cannot find symbol
        Person mark = new Person();
                          ^
  symbol:   class Person
  location: class controller

我对此进行了相当多的研究,但似乎无法弄清楚。我是否试图在我的 controller.java 文件中错误地实例化对象?谢谢。

4

2 回答 2

0

从源根目录运行编译器。您必须位于包含匹配打包程序名称的“人员”文件夹的文件夹中。

例子。“D:\2\people”中的 Java 文件,如果当前文件夹是“D:\2\people”并且您运行

"C:\Program Files (x86)\Java\jdk1.8.0_60\bin\javac.exe" controller.java

然后你会得到你描述的错误。

但是,如果您将当前文件夹更改为“D:\2”并运行

"C:\Program Files (x86)\Java\jdk1.8.0_60\bin\javac.exe" people\controller.java

一切都会被编译。不要忘记修复你的构造函数。

于 2015-12-02T19:58:13.440 回答
0

你的类Person有一个构造函数,它接受两个参数, aString和 an intPerson但是,您正在尝试使用不带参数的构造函数来创建对象:

Person mark = new Person();

您需要将参数传递给构造函数:

Person mark = new Person("Mark", 24);

当然,在那之后您不再需要调用这些set...()方法。

Java 编译器会自动在类中创建一个不带参数的构造函数,但前提是您根本没有在类中显式添加任何构造函数。

于 2015-12-02T19:11:30.193 回答