这个java教程错了吗?

时间:2013-01-02 22:48:06

标签: java object

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

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

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

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

(代码在页面中间)

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

5 个答案:

答案 0 :(得分: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;
   }

答案 1 :(得分:7)

您缺少方法的返回类型。

 public setAge( int age ){

应该是

   public void setAge( int age ){

   public getAge( ){

应该是

   public int getAge( ){

答案 2 :(得分:4)

您的方法未说明返回的内容(类型)。将它们改为:

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

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

  1. 修改器 - 例如公共,私人和其他您将在稍后了解的内容。
  2. 返回类型 - 方法返回的值的数据类型,如果方法未返回值,则为void。 (你错过了这个
  3. 方法名称 - 字段名称的规则也适用于方法名称,但约定略有不同。
  4. 括号中的参数列表 - 以逗号分隔的输入参数列表,前面是数据类型,括在括号中,()。如果没有参数,则必须使用空括号。
  5. 一个例外列表 - 稍后讨论。
  6. 括在括号之间的方法体 - 方法的代码,包括局部变量的声明,就在这里。
  7. 更多内容阅读:http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

答案 3 :(得分:2)

为什么它不起作用?

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

Java Language Specification注意到方法声明应遵循以下格式:

MethodModifiers(可选)TypeParameters(可选)结果MethodDeclarator引发(可选)

放松,让我们慢慢看看:

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

enter image description here

只需告诉我工作代码!

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 );
    }
}

答案 4 :(得分:0)

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

你错过了类型。 我建议你查看core java tutorial。 很好地解释了。