Printing Objects: Formatting with toString( )

Problem

You want your objects to have a useful default format.

Solution

Override the toString( ) method inherited from java.lang.Object.

Discussion

Whenever you pass an object to System.out.println( ) or any equivalent method, or involve it in string concatenation, Java will automatically call its toString( ) method. Java “knows” that every object has a toString( ) method, since java.lang.Object has one and all classes are ultimately subclasses of Object. The default implementation, in java.lang.Object, is neither pretty nor interesting: it just prints the class name, an @ sign, and the object’s hashCode( ) value (see Section 8.4). For example, if you run this code:

/* Demonstrate toString(  ) without an override */
public class ToStringWithout {
    int x, y;

    /** Simple constructor */
    public ToStringWithout(int anX, int aY) {
        x = anX; y = aY;
    }

    /** Main just creates and prints an object */
    public static void main(String[] args) { 
        System.out.println(new ToStringWithout(42, 86));
    }
}

you might see this uninformative output:

ToStringWithout@990c747b

So, to make it print better, you should provide an implementation of toString( ) that prints the class name and some of the important state in all but the most trivial classes. This gives you formatting control in println( ), in debuggers, and anywhere your objects get referred to in a String context. Here is the previous program done over with a toString( ) method:

/* Demonstrate toString(  ) with an override */
public class ToStringWith {
    int x, y;

    /** Simple constructor */
    public ToStringWith(int anX, int aY) {
        x = anX; y = aY;
    }

    /** Override toString */
    public String toString(  ) {
        return "ToStringWith[" + x + "," + y + "]";
    }
    /** Main just creates and prints an object */
    public static void main(String[] args) { 
        System.out.println(new ToStringWith(42, 86));
    }
}

This version produces the more useful output:

ToStringWith[42,86]
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.217.220