MCQs
What will be the output of the program?
import java.util.*;
class H
{
public static void main (String[] args)
{
Object x = new Vector().elements();
System.out.print((x instanceof Enumeration)+",");
System.out.print((x instanceof Iterator)+",");
System.out.print(x instanceof ListIterator);
}
}
The Vector.elements method returns an Enumeration over the elements of the vector.
Vector implements the List interface and extends AbstractList so it is also possible to
get an Iterator over a Vector by invoking the iterator or listIterator method.
The choices are between Option A and B, what this question is really testing is your knowledge
of default values of an initialized array. This is an array type float i.e. it is a type that uses decimal
point numbers therefore its initial value will be 0.0 and not 0
The iterator() method returns an iterator over the elements in the list in proper sequence, it
doesn't return a List or a ListIterator object.
A ListIterator can be obtained by invoking the listIterator method.
In the above code the array reference variable x has been declared but it has not been
instantiated i.e. the new statement is missing, for example:
private static int[]x = new int[5];
private static int[x] declares a static i.e. class level array.
the "new" keyword is the word that actually creates said array.
int[5] in association with the new sets the size of the array. so since the above code contains
no new or size decalarations when you try and access x[0] you are trying to access a member
of an array that has been declared but not intialized hence you get a NullPointerException at
runtime.
What will be the output of the program?
package foo;
import java.util.Vector; /* Line 2 */
private class MyVector extends Vector
{
int i = 1; /* Line 5 */
public MyVector()
{
i = 2;
}
}
public class MyNewVector extends MyVector
{
public MyNewVector ()
{
i = 4; /* Line 15 */
}
public static void main (String args [])
{
MyVector v = new MyNewVector(); /* Line 19 */
}
}
Option B is correct. The compiler complains with the error "modifier private not allowed here".
The class is created private and is being used by another class on line 19.
Option B is correct because to set the value of a String variable to null you must use "null"
and not "NULL".
This is a great way to think about when objects can be garbage collected.
Option A and B assume guarantees that the garbage collector never makes.
Option D is wrong because of the now famous islands of isolation scenario.
Option B is correct. If an object can be accessed from a live thread, it can't be garbage collected.
Option A is wrong. Runtime.gc() asks the garbage collector to run, but the garbage collector never
makes any guarantees about when it will run or what unreachable objects it will free from memory.
Option C is wrong. The garbage collector runs immediately the system is out of memory before an OutOfMemoryException is thrown by the JVM.
Option D is wrong. If this were the case then the garbage collector would actively hang onto objects
until a program finishes - this goes against the purpose of the garbage collector.
When running the program you entered 3 arguments "red", "green" and "blue". When dealing
with arrays in java you must remember ALL ARRAYS IN JAVA ARE ZERO BASED therefore
args[0] becomes "red", args[1] becomes "green" and args[2] becomes "blue".
When the program entcounters line 8 above at runtime it looks for args[3] which has never been
created therefore you get an
ArrayIndexOutOfBoundsException at runtime.
(2) - This is a Java keyword
(3) - This is a Java keyword
(1) - Is incorrect because although it is a method of Thread/Runnable it is not a keyword
(4) - This is not a Java keyword the keyword is implements