1

我是一个真正的Java初学者。有人向我推荐了我开始阅读的 Head First Java 书。我按照书上的指示做了。除了记事本和cmd,我没有使用其他任何东西。一切正常(在记事本中输入代码,将其保存为“.java”,使用 javac 编译器进行编译,使用 java 命令运行程序),直到我开始第二章:Objectville 之旅。

现在我有一个难题:我如何创建类来相互交互?如果我创建两个类并在其中任何一个上尝试 javac,则错误是:“缺少返回语句”。

任何帮助将非常感激。在此先感谢并怀着感激之情,亚历克斯。

4

5 回答 5

3

如果您想在不使用记事本的情况下创建两个相互交互的类,您只需在同一个文件夹中创建这两个类。这是最简单的方法。

您也可以一次编译两个源文件,如下所示。

javac a.java b.java

这将编译两个 java 文件。

于 2013-10-25T18:47:29.477 回答
2

如果你得到“缺少返回语句”,那是因为你的方法是用非 void 返回类型声明的。比如:

public someType someMethod(){
...
}

在它的体内没有返回语句。你可以做两件事:

将 someType 更改为 void 或添加 return someValue;到你的方法

于 2013-10-25T18:47:31.650 回答
2

如果您收到“缺少返回语句”,您将收到编译时错误而不是运行时错误。

您收到的编译时错误表明您的方法之一需要返回语句,但该方法没有。要么返回预期的值,要么将方法签名更改为 void,这样它就不需要返回值。

下面是一个如何编写多个相互交互的对象的示例:

Q19597109.java

/**
 * http://stackoverflow.com/questions/19597109/problems-compiling-classes-in-chapter-two-classes-and-objects-of-head-first-jav
 */
public class Q19597109 {
  public static void main(String... args) {
    Person person = new Person();
    person.setName("Bob");

    Greeter greeter = new Greeter(person);
    greeter.sayHello();
  }
}

人.java

/**
 * http://stackoverflow.com/questions/19597109/problems-compiling-classes-in-chapter-two-classes-and-objects-of-head-first-jav
 */
public class Person {
  private String name;

  public String getName() {
    return name;
  }

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

  @Override
  public String toString() {
    return name;
  }
}

Greeter.java

/**
 * http://stackoverflow.com/questions/19597109/problems-compiling-classes-in-chapter-two-classes-and-objects-of-head-first-jav
 */
public class Greeter {
  private final Person person;

  public Greeter(Person person) {
    this.person = person;
  }

  public void sayHello() {
    System.out.println("Hello " + person);
  }
}

如果这些文件中的每一个都在同一个目录中,那么您可以这样做:

javac *.java
java Q19597109

输出是:

Hello Bob
于 2013-10-25T18:40:07.080 回答
2

您需要提供您遇到问题的源代码。使用 {} 代码注释更好地呈现它。

现在已经说过,您的问题与 2 个类无关,因为您有一个不返回的类。您有编译错误而不是运行时错误。如果我有一个像

public int add(int a, int b) {
    int c = a + b;
    return c;
}

在公开向编译器承诺我将提供返回值之后,您会看到“int”。“return c”部分是实现该承诺的部分。你几乎肯定错过了“c”(在这个例子中。

请提供代码,我们可以提供更多帮助

于 2013-10-25T18:43:18.167 回答
-1

class Dog {

int size;
String breed;   
String name;

Void bark() {

System.out.println("Ham! Ham!");

} }

//this is the fist class

于 2013-10-25T18:50:07.107 回答