-2

我正在尝试学习 java 中的对象和类,在线教程给了我无法在 Eclipse 上编译/运行的代码。

当我在保存类后编译程序时,它给了我错误:

线程“主”java.lang.Error 中的异常:未解决
的编译问题:方法 setAge(int) 未定义 Puppy
类型 Puppy.main(Puppy.java:23) 的方法 getAge() 未定义

public class Puppy{

       int puppyAge;

       public Puppy(String name){
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name ); 
   }
   public setAge( int age ){
       puppyAge = age;
   }

   public getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }
   public static void main(String []args){
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge ); 
   }
}

http://www.tutorialspoint.com/java/java_object_classes.htm

(代码在页面中间)

它是一个构造函数类程序。不应该有返回类型。

4

5 回答 5

10

您(或教程)缺少方法签名中的返回类型。

public setAge( int age ){
       puppyAge = age;
   }

   public getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }

应该

public void setAge( int age ){
       puppyAge = age;
   }

   public int getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }
于 2013-01-02T22:49:15.523 回答
7

您缺少方法的返回类型。

 public setAge( int age ){

应该

   public void setAge( int age ){

   public getAge( ){

应该

   public int getAge( ){
于 2013-01-02T22:49:04.150 回答
4

您的方法没有说明返回什么(类型)。将它们更改为:

 public void setAge(int age) { ... }
 public int getAge() { ... }

该文档列出了 Java 方法的六个部分:

  1. 修饰符——例如 public、private 以及您稍后将了解的其他修饰符。
  2. 返回类型——方法返回值的数据类型,如果方法没有返回值,则为 void。(你错过了这个
  3. 方法名称——字段名称的规则也适用于方法名称,但约定略有不同。
  4. 括号中的参数列表 — 输入参数的逗号分隔列表,前面是它们的数据类型,用括号 () 括起来。如果没有参数,则必须使用空括号。
  5. 例外列表——稍后讨论。
  6. 方法体,用大括号括起来——方法的代码,包括局部变量的声明,放在这里。

更多阅读:http ://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

于 2013-01-02T22:49:51.153 回答
2

为什么它不起作用?

您必须将返回类型添加到getAge()setAge()

Java 语言规范指出方法声明应遵循以下格式:

MethodModifiers(可选) TypeParameters(可选) Result MethodDeclarator Throws(可选)

放松,让我们慢慢看这个:

  • MethodModifiers(optional) - 您可以将每个方法标记为私有/公共/受保护。如果省略这个参数方法是包。还有一些修饰符,但现在这些对你来说最有趣
  • TypeParameters(optional) - 它是关于泛型方法的。你现在可以安全地跳过这个
  • 结果 - 这个很重要。每个方法都必须明确说明它返回的内容。您的示例中缺少此内容。
  • MethodDeclarator - 您的方法的名称。
  • Throws(optional) - 如果你的方法会抛出异常你必须在这里写。现在你可以安全地跳过它。

在此处输入图像描述

只需向我展示工作代码!

public class Puppy{

    int puppyAge;

    public Puppy(String name){
        // This constructor has one parameter, name.
        System.out.println("Passed Name is :" + name );
    }
    public void setAge( int age ){
        puppyAge = age;
    }

    public int getAge( ){
        System.out.println("Puppy's age is :" + puppyAge );
        return puppyAge;
    }
    public static void main(String []args){
      /* Object creation */
        Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
        myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
        myPuppy.getAge( );

      /* You can access instance variable as follows as well */
        System.out.println("Variable Value :" + myPuppy.puppyAge );
    }
}
于 2013-01-07T21:03:46.983 回答
0

您的方法签名有问题。它们应该是这样的: public void setAge(int age) { } public int getAge() { }

你错过了类型。我建议你查看这个核心 Java 教程。解释得很好。

于 2016-07-31T16:53:38.487 回答