Anon Omus
Anon Omus

Reputation: 381

Java print method won't work in class

I am trying to get the print method in my actor class to print the String that was built in the toString() method. However I keep getting an error. (invalid method declaration, return type required)

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

I have been trying to get this working for quite a while to no avail.

Upvotes: 1

Views: 34716

Answers (11)

Mjachowdhury
Mjachowdhury

Reputation: 81

Simple as it is.... Once you write toString() method in a class then do another method called print() and call inside the print() method toString() method.

public void print()
{
  System.out.println(toString());
}

Upvotes: 0

Imtiaz Ali
Imtiaz Ali

Reputation: 362

here is your code.. compile and run.. 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();
   }
  }  

Upvotes: 0

Johan Brännmar
Johan Brännmar

Reputation: 916

By adding a main method to your class and using the constructor for Actor in that method you create an Author object. On this Author object call print().

TJamesBoone has given a really good answer to give you an understanding of what is really happening. Follow his answer and it will do as you want.

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

Upvotes: 0

James Dunn
James Dunn

Reputation: 8264

Here's the two parts to the trouble you're having:

  1. In order to run your program, you have to have a main method.
  2. You have to understand what static and non-static mean.

First, as mentioned by others, you can't just have a method run because it's declared and defined in your class. You actually need to have it called, directly or indirectly, by the main method. The main method is written like this:

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

Secondly, you have to understand what static and non-static mean. Which means, you have to understand the difference between classes and objects.

Classes are blue prints. They describe how to build a particular type of object, what properties (or fields) it has, and what methods can be called off of it.

Objects are the actual instances of objects declared by a class. Think of it like this: A class is like the blueprint for a smart car. The objects are the smart cars themselves.

So now, static vs non-static.

Static means that it belongs to the class (the blueprint), rather than to the actual object. The main method, you will notice, is static. It belongs to the class it's declared in, rather than to any instance objects. This means, outside of itself, the main method knows only about the class that it's in, and any other static methods or objects in that class. Things that are not static belong to the actual objects created from the class -- and the main method will know nothing about these actual objects, unless they are created inside of the main method itself.

So, something like this won't work:

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!
    }
}

Instead, you can first create a new instance object of your class inside of the main method, and then call the non-static instance method off of your instance object:

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

This is usually not as good of a choice, but will also work:

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

Upvotes: 6

user1339772
user1339772

Reputation: 803

Why do you need print() method ? You can just use -

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

This will implicitly execute toString() method

Upvotes: 1

David Lau
David Lau

Reputation: 220

You should have a main function to let the program run, like:

remove the last line print() then create a new file call Main.java, write

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

Upvotes: 1

Barzee
Barzee

Reputation: 905

Java does not allow you to call a method in the body of a class as you are attempting to do with the line of code that is print(); You must put the call to print inside another method. For example

public static void main(String[] args) {
    actor a = new actor();
    a.print();
}

Upvotes: 0

quazzieclodo
quazzieclodo

Reputation: 831

First off, you should be calling the print() method from somewhere else (main for example). Even with that, you have an error: You are calling the toString() method (with no arguments, which is taken from the Object class). Just remove the arguments from your toString method to override that one. It can see the fields of its own class anyways. With this, you can do something like the following, and take advantage of Java's default toString call:

public static void main(String[] args) {
    System.out.println(new Actor("Bob", "410 Main Street", 42);
}

Upvotes: 0

Masudul
Masudul

Reputation: 21961

Calling print(); on class body is invalid. Remove following method call.

 print();

Upvotes: 0

Dark Knight
Dark Knight

Reputation: 8347

Ideally you should do this way. Since purpose of toString() method is to give meaningful String representation of an object.

actor actorObj = new actor();
System.out.println(actorObj );

Upvotes: 0

alexroussos
alexroussos

Reputation: 2681

You're trying to call print() from your class body. Instead, write a main method and print from there:

public static void main(String[] args) {
  Actor a = new Actor(...);
  a.print();
}

Upvotes: 1

Related Questions