// Fig. 7.5: Point.java
// Definition of class Point
public class Point {
   protected int x, y; // coordinates of the Point

   // no-argument constructor
   public Point() 
   { 
      setPoint( 0, 0 ); 
      System.out.println( "Point constructor: " + 
                          toString() );
   }

   // constructor
   public Point( int a, int b ) 
   { 
      setPoint( a, b ); 
      System.out.println( "Point constructor: " + 
                          toString() );
   }

   // finalizer
   protected void finalize() throws Throwable
   {
      System.out.println( "Point finalizer: " +
                          toString() );
      super.finalize();  // call superclass finalize method
   }

   // Set x and y coordinates of Point
   public void setPoint( int a, int b )
   {
      x = a;
      y = b;
   }

   // get x coordinate
   public int getX() { return x; }  

   // get y coordinate
   public int getY() { return y; }

   // convert the point into a String representation
   public String toString() 
      { return "[" + x + ", " + y + "]"; }
}

