User Tools

Site Tools


cs176:501b:static_class_members_enumerated_types

Static Class Variables and Methods, What's This?


Static Class Variables and Methods

  • Static class members (Class variables and methods that are declared static)
    • Belong to the class itself and are independent of any one instance (object) of the class.
      • Instance variables belong to instances of the class, i.e., objects of the the class.
      • Instance methods belong to instances of the class.
        • Can't call an instance method without creating an instance (object) of the class first.
   MagicEightBall m8 = new MagicEightBall(); // create MagicEightBall instance (object) m8
   System.out.println("Your answer: " + m8.getAnswer(); // call the getAnswer() instance method of m8
  • Static variables and methods are non-instance variables and methods.
    • If you want all the instances of a class to share data, use static variables (or static constants), which are also known as class variables.
    • This allows for useful public static constants in Java such as Math.PI.
    • Static methods can be called without creating an instance (object) of the class.
      • This allows for useful methods in Java such as the static methods of the Math class, e.g. Math.random(), Math.sqrt(), Math.pow(), etc.
        • After all, it would be inconvenient to have to create Math class objects just to use methods like random() and sqrt() or constants like PI.

Static class variables

  • A static class variable is added using the static keyword.
  • Point/Rectangle/TestRectangle static example:
    • In the example, a static int pointCount variable is added to a Point class:
   public class Point {

      private  int   _x;
      private  int   _y;

      // Use static pointCount variable to track number of Point objects created:
      private static int pointCount = 0;

      // Constructors:  static pointCount gets incremented in every constructor:
      public Point( int x, int y ) {
         setX( x );
         setY( y );
         pointCount++;
      }

      public Point() {
         pointCount++;
      }
      ...
      ...
      // Instance methods can access static variables
      public int getPointCount() {
         return pointCount;
      }
  • Also, a static rectangleCount variable is added to a Rectangle class that includes the above Point class:
   public class Rectangle {

      private Point _point;
      private int _width;
      private int _height;

      // Use static rectangleCount variable to track number of Rectangle objects
      // created:
      private static int rectangleCount = 0;

      // Constructors: static rectangleCount gets incremented in every
      // constructor:
      public Rectangle( int point_x, int point_y, int width, int height )
      {
         _point = new Point( point_x, point_y );
            // Must call Point class constructor to create _point
         setWidth( width );
         setHeight( height );
         rectangleCount++;
      }
      ...
      ...
      // Instance methods can access static variables
      public int getRectangleCount() {
         return rectangleCount;
      }
  • In TestRectangle.java, the pointCount and rectangleCount static variables are accessed to show how static class variables work:
   // Use Point class static pointCount variable:
   System.out.println( box.getPoint().getPointCount() +
                       " points so far." );

   // Use Rectangle class static rectangleCount variable:
   System.out.println( box.getRectangleCount() +
                       " rectangles so far." );

Static class methods

  • When a class contains a static method, an instance (object) of the class is not needed to use the method.
    • For example, with a static version of the getPointCount() method called sgetPointCount()), we can access the pointCount static variable using Point.sgetPointCount().
      • The “Point” in Point.sgetPointCount() is the class name, not the name of a Point class object.
    • Restriction: With a static method, you can only access static variables of the same class.
   public class Point {
      ...
      private static int pointCount = 0;
      ...
      ...
      // static version of getPointCount:
      public static int sgetPointCount() {
         return pointCount;
      }
      ...
   }



   public class TestRectangle {
      ...
      ...
      // Use Point class' static sgetPointCount method:
      System.out.println( Point.sgetPointCount() + " points so far." );
      ...
      ...
   }

What's "this"?


  • The “this” reference variable
  • “this” is the name of a reference variable that an object can use to refer to itself.
    • Can be used in only non-static (instance) methods.
   public class Rectangle {
      private int width;
      private int height;

   
      // setHeight method of Rectangle class:
      public void setHeight( int height ) {
         height = height; // ??? Shadowing: Which height is which ???
      }
   }







   public class Rectangle {
      private int width;
      private int height;

   
      // Avoid shadowing using "this":
      public void setHeight( int height ) {
         this.height = height;
      
         // "This" Rectangle's instance variable height
         // is equal to the value of the input parameter
         // variable height.
      }
   }

cs176/501b/static_class_members_enumerated_types.txt · Last modified: 2015/03/06 18:07 by jchung

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki