Question 1: What's wrong with the following program?Answer 1: The code never creates apublic 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()); } }Rectangle
object. With this simple program, the compiler generates an error. However, in a more realistic situation,myRect
might be initialized tonull
in one place, say in a constructor, and used later. In that case, the program will compile just fine, but will generate aNullPointerException
at runtime.Question 2: The following code creates one array and one string object. How many references to those objects exist after the code executes? Is either object eligible for garbage collection?
Answer 2: There is one reference to the... String[] students = new String[10]; String studentName = "Peter Parker"; students[0] = studentName; studentName = null; ...students
array and that array has one reference to the stringPeter Parker
. 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 tonull
so that it becomes eligible for garbage collection. But the program does not actually destroy objects.
Exercise 1: Fix the program called
SomethingIsWrong
shown in Question 1.
Answer 1: SeeSomethingIsRight
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: SeeNumberHolderDisplay
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); } }