1

我试图在我的演员类中获取 print 方法来打印在 toString() 方法中构建的字符串。但是我不断收到错误消息。(无效的方法声明,需要返回类型)

public class actor {

    private String name;
    private String address;
    private int age;


public actor(String name, String address, int age) {

    this.name = name;
    this.address = address;
    this.age = age;


}


public void setName (String name) {

    this.name = name;

}


public void setAddress (String address) {

    this.address = address;
}


public void setAge (int age) {

    this.age = age;

}

public void setFilm () {


}

public String getName () {
    return name;

}

public String getAddress () {
    return address;

}

public String toString (String name, int age, String address){

        return name+" who's "+age+" and lives in "+address;


}


public void print (){
    String a = toString();
    System.out.println(a);

}


print();
}

我一直试图让这个工作很长一段时间都无济于事。

4

11 回答 11

5

这是您遇到的麻烦的两个部分:

  1. 为了运行你的程序,你必须有一个 main 方法。
  2. 您必须了解静态和非静态的含义。

首先,正如其他人所提到的,您不能只运行一个方法,因为它是在您的类中声明和定义的。您实际上需要通过 main 方法直接或间接调用它。主要方法是这样写的:

public static void main(String[] args) {
    // Do Stuff
}

其次,您必须了解静态和非静态的含义。这意味着,您必须了解类和对象之间的区别。

课程是蓝图。它们描述了如何构建特定类型的对象、它具有哪些属性(或字段)以及可以从中调用哪些方法。

对象是类声明的对象的实际实例。可以这样想:一个类就像智能汽车的蓝图。对象是智能汽车本身。

所以现在,静态与非静态。

静态意味着它属于类(蓝图),而不是实际对象。您会注意到,主要方法是静态的。它属于它声明的类,而不是任何实例对象。这意味着,除了它自己之外,主方法只知道它所在的类,以及该类中的任何其他静态方法或对象。非静态的东西属于从类创建的实际对象——主方法对这些实际对象一无所知,除非它们是在主方法本身内部创建的。

所以,这样的事情是行不通的:

public class StuffDoer {
    public void doStuff {
        System.out.println("Doing Stuff");
    }

    public static void main(String[] args) {
        doStuff();  // Won't work!
        // You can't call a non-static, instance method in a static method!
    }
}

相反,您可以首先在 main 方法中创建类的新实例对象,然后从实例对象中调用非静态实例方法:

public class StuffDoer {
    public void doStuff {
        System.out.println("Doing Stuff");
    }

    public static void main(String[] args) {

        new StuffDoer().doStuff();  // This will work,
        // because now you have an instance to call the instance method off of.
    }
}

这通常不是一个好的选择,但也可以:

public class StuffDoer {
    public static void doStuff { //Now, we make this method static
        System.out.println("Doing Stuff");
    }

    public static void main(String[] args) {
        doStuff();  // This will work now, because this method is static.
    }
}
于 2013-11-14T15:43:01.350 回答
1

您应该有一个 main 函数来让程序运行,例如:

删除最后一行 print() 然后创建一个新文件调用 Main.java,写

package yourPackage // put them into the same package, 
                    main class can call actor class

public class Main{
   public static void main(String[] args) {
      actor a = new actor();
      a.print();
   }
}
于 2013-11-14T15:04:08.623 回答
1

您正在尝试从您的班级主体中调用 print() 。相反,编写一个 main 方法并从那里打印:

public static void main(String[] args) {
  Actor a = new Actor(...);
  a.print();
}
于 2013-11-14T14:58:56.297 回答
1

为什么需要print()方法?你可以使用 -

Actor a = new Actor(...);
System.out.println(a);

这将隐式执行toString()方法

于 2013-11-14T15:15:45.873 回答
0

通过向您的类添加一个 main 方法并在该方法中使用 Actor 的构造函数,您可以创建一个 Author 对象。在此 Author 对象上调用 print()。

TJamesBoone 给出了一个非常好的答案,让您了解真正发生的事情。按照他的回答,它会如你所愿。

https://stackoverflow.com/a/19981973/1785341

于 2014-11-24T15:26:03.803 回答
0

理想情况下,您应该这样做。由于 toString() 方法的目的是为对象提供有意义的字符串表示。

actor actorObj = new actor();
System.out.println(actorObj );
于 2013-11-14T14:58:58.783 回答
0

调用print();类体无效。删除以下方法调用。

 print();
于 2013-11-14T15:00:24.390 回答
0

首先,您应该print()从其他地方(main例如)调用该方法。即使这样,您也会遇到错误:您正在调用该toString()方法(没有参数,取自 Object 类)。只需从您的toString方法中删除参数即可覆盖该参数。无论如何,它可以看到自己类的字段。有了这个,您可以执行以下操作,并利用 Java 的默认 toString 调用:

public static void main(String[] args) {
    System.out.println(new Actor("Bob", "410 Main Street", 42);
}
于 2013-11-14T15:00:34.767 回答
0

Java 不允许您在尝试使用代码行时调用类主体中的方法,即print(); 您必须将调用 print 放在另一个方法中。例如

public static void main(String[] args) {
    actor a = new actor();
    a.print();
}
于 2013-11-14T15:00:50.757 回答
0

这是你的代码.. 编译并运行.. public class actor {

   private String name;
   private String address;
   private int age;


 public actor(String name, String address, int age) {

   this.name = name;
  this.address = address;
  this.age = age;


  }


 public void setName (String name) {

  this.name = name;

 }


public void setAddress (String address) {

  this.address = address;
 } 


 public void setAge (int age) {

  this.age = age;

}

 public void setFilm () {


 }

 public String getName () {
   return name;

}

  public String getAddress () {
    return address;

 }
 @Override

  public String toString (){

       return name+" who's "+age+" and lives in "+address;


   }


   public void print (){
     //String a = toString();
     System.out.println(this);

   }

    public static void main( String[] args )
  {
       actor a = new actor( "xyz","abc",20 );
      a.print();
   }
  }  
于 2015-07-30T08:15:00.483 回答
0

虽然很简单......一旦你在一个类中编写了 toString() 方法,然后执行另一个名为 print() 的方法并在 print() 方法中调用 toString() 方法。

public void print()
{
  System.out.println(toString());
}
于 2017-10-04T23:17:45.987 回答