Once you've created an object, you probably want to use it for something. You may need to use the value of one of its fields, change one of its fields, or call one of its methods to perform an action.
Object fields are accessed by their name. You must use a name that is unambiguous.
You may use a simple name for a field within its own class. For example, we can add a statement within the
Rectangle class that prints the
System.out.println("Width and height are: " + width + ", " + height);
In this case,
height are simple names.
Code that is outside the object's class must use an object reference or expression, followed by the dot (.) operator, followed by a simple field name, as in:
For example, the code in the
CreateObjectDemo class is outside the code for the
Rectangle class. So to refer to the
width , and
height fields within the
Rectangle object named
rectOne , the
CreateObjectDemo class must use the names
rectOne\.width , and
rectOne\.height , respectively. The program uses two of these names to display the
width and the
System.out.println("Width of rectOne: " + rectOne.width); System.out.println("Height of rectOne: " + rectOne.height);
Attempting to use the simple names
height from the code in the
CreateObjectDemo class doesn't make sense — those fields exist only within an object — and results in a compiler error.
Later, the program uses similar code to display information about
rectTwo . Objects of the same type have their own copy of the same instance fields. Thus, each
Rectangle object has fields named
width , and
height . When you access an instance field through an object reference, you reference that particular object's field. The two objects
rectTwo in the
CreateObjectDemo program have different
width , and
To access a field, you can use a named reference to an object, as in the previous examples, or you can use any expression that returns an object reference. Recall that the
new operator returns a reference to an object. So you could use the value returned from new to access a new object's fields:
int height = new Rectangle().height;
This statement creates a new
Rectangle object and immediately gets its height. In essence, the statement calculates the default height of a
Rectangle . Note that after this statement has been executed, the program no longer has a reference to the created
Rectangle , because the program never stored the reference anywhere. The object is unreferenced, and its resources are free to be recycled by the Java Virtual Machine.
You also use an object reference to invoke an object's method. You append the method's simple name to the object reference, with an intervening dot operator (.). Also, you provide, within enclosing parentheses, any arguments to the method. If the method does not require any arguments, use empty parentheses.
Rectangle class has two methods:
getArea\(\) to compute the rectangle's area and
move\(\) to change the rectangle's origin. Here's the
CreateObjectDemo code that invokes these two methods:
System.out.println("Area of rectOne: " + rectOne.getArea()); ... rectTwo.move(40, 72);
The first statement invokes
getArea() method and displays the results. The second line moves
rectTwo because the
move\(\) method assigns new values to the object's
As with instance fields, objectReference must be a reference to an object. You can use a variable name, but you also can use any expression that returns an object reference. The
new operator returns an object reference, so you can use the value returned from new to invoke a new object's methods:
new Rectangle(100, 50).getArea()
new Rectangle\(100, 50\) returns an object reference that refers to a
Rectangle object. As shown, you can use the dot notation to invoke the new
getArea\(\) method to compute the area of the new rectangle.
Some methods, such as
getArea\(\) , return a value. For methods that return a value, you can use the method invocation in expressions. You can assign the return value to a variable, use it to make decisions, or control a loop. This code assigns the value returned by
getArea\(\) to the variable
int areaOfRectangle = new Rectangle(100, 50).getArea();
Remember, invoking a method on a particular object is the same as sending a message to that object. In this case, the object that
getArea\(\) is invoked on is the rectangle returned by the constructor.
Some object-oriented languages require that you keep track of all the objects you create and that you explicitly destroy them when they are no longer needed. Managing memory explicitly is tedious and error-prone. The Java platform allows you to create as many objects as you want (limited, of course, by what your system can handle), and you don't have to worry about destroying them. The Java runtime environment deletes objects when it determines that they are no longer being used. This process is called garbage collection .
An object is eligible for garbage collection when there are no more references to that object. References that are held in a variable are usually dropped when the variable goes out of scope. Or, you can explicitly drop an object reference by setting the variable to the special value
null . Remember that a program can have multiple references to the same object; all references to an object must be dropped before the object is eligible for garbage collection.
The Java runtime environment has a garbage collector that periodically frees the memory used by objects that are no longer referenced. The garbage collector does its job automatically when it determines that the time is right.