Download the JDK
Search the Tutorials
Trail: Learning the Java Language
Lesson: Classes and Objects
Home Page > Learning the Java Language > 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 it 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.

> >     public class NumberHolder {
> >         public int anInt;
> >         public float aFloat;
> >     }

> Answer 2: See `NumberHolderDisplay`

> >     public class NumberHolderDisplay {
> >         public static void main(String[] args) {
> >     	NumberHolder aNumberHolder = new NumberHolder();
> >     	aNumberHolder.anInt = 1;
> >     	aNumberHolder.aFloat = 2.3f;
> >     	System.out.println(aNumberHolder.anInt);
> >     	System.out.println(aNumberHolder.aFloat);
> >         }
> >     }

Previous page: Questions and Exercises: Objects