Trail: Learning the Java Language
Lesson: Classes and Objects
Answers to Questions and Exercises: Objects

Questions

Question 1: What's wrong with the following program?
public class SomethingIsWrong {
    public static void main(String[] args) {
        Rectangle myRect;
        myRect.width = 40;
        myRect.height = 50;
        System.out.println("myRect's area is " + myRect.area());
    }
}
Answer 1: The code never creates a Rectangle object. With this simple program, the compiler generates an error. However, in a more realistic situation, myRect might be initialized to null in one place, say in a constructor, and used later. In that case, the program will compile just fine, but will generate a NullPointerException at runtime.

Question 2: The following code creates one Point object and one Rectangle object. How many references to those objects exist after the code executes? Is either object eligible for garbage collection?

...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle(point, 20, 20);
point = null;
...
Answer 2: There is one reference to the Point object and one to the Rectangle object. Neither object is eligible for garbage collection.

Question: How does a program destroy an object that it creates?
Answer: A program does not explicitly destroy objects. A program can set all references to an object to null so that the becomes eligible for garbage collection. But the program does not actually destroy objects.


Exercises

Exercise 1: Fix the program called SomethingIsWrong shown in Question 1.
Answer 1: See SomethingIsRight

public class SomethingIsRight {
    public static void main(String[] args) {
        Rectangle myRect = new Rectangle();
        myRect.width = 40;
        myRect.height = 50;
        System.out.println("myRect's area is " + myRect.area());
    }
}

Exercise 2: Given the following class, called NumberHolder, write some code that creates an instance of the class, initializes its two member variables, and then displays the value of each member variable.

#includejava ./NumberHolder.java

Answer 2: See NumberHolderDisplay
#includejava NumberHolderDisplay.java
Previous page: Questions and Exercises: Objects