【问题标题】:Problems compiling classes in chapter two: classes and objects of Head First Java 2 Edition第二章编译类的问题:Head First Java 2 Edition的类和对象
【发布时间】:2013-11-05 00:01:04
【问题描述】:

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

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

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

【问题讨论】:

  • 您的问题已经得到解答:stackoverflow.com/questions/4800781/…
  • 请发布您的代码。没有它,我们无法确定“缺少返回语句”错误的确切原因。
  • 如果你创建了两个类,你应该至少得到类未找到或找不到符号异常。缺少 return 语句的原因是别的。

标签: java cmd javac notepad


【解决方案1】:

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

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

javac a.java b.java

这将编译两个 java 文件。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • {class Dog { int size;弦乐品种;字符串名称; void bark() { System.out.println("火腿!火腿!"); } }
    【解决方案3】:

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

    public someType someMethod(){
    ...
    }
    

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

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

    【讨论】:

      【解决方案4】:

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

      您收到的编译时错误表明您的方法之一需要返回语句,但该方法没有。要么返回预期的值,要么将方法签名更改为 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();
        }
      }
      

      Person.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
      

      【讨论】:

        【解决方案5】:

        类狗{

        int size;
        String breed;   
        String name;
        

        虚空吠声() {

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

        } }

        //这是第一课

        【讨论】:

        • 将“无效”更改为“无效”。带有大写 V 的“Void”期望返回一个 Void 类型的对象。通常,“return null”用作带有“Void”的返回语句。带有小写 v 的“void”表示该方法不返回值。
        • java 区分大小写,这意味着 Void 与 void 不同。 void 是一个关键字,而 Void 将被视为一种新类型。您可能需要将 Void 更改为 void。除非您在某处有类 Void{} 声明。在这种情况下,您仍然会收到错误,因为编译器会期望您返回 Void。
        • 不应将代码发布到您的原始问题作为答案,而应编辑原始帖子以包含此代码 sn-p。这澄清了这是问题的一部分,而不是答案。此外,StackOverflow 的标准做法是将问题的最佳答案标记为“已接受”答案。
        • 对不起......我有一段时间没有使用stackoverflow......我会更加小心
        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        • 2021-11-27
        • 2018-11-13
        • 1970-01-01
        相关资源
        最近更新 更多