Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
177 views

Passa: Class Public Static Void New

The program defines a PassA class with a main method that creates a PassA object and calls its start method. The start method defines two long arrays, fixes one of the arrays by changing an element, and prints the sums of the arrays. The fix method changes an element of the passed array. The output is 15 15, as the fix method modifies the original array passed to it. The program defines a Test class with a main method that calls a start method. The start method defines a boolean, passes it to a fix method, and prints the original and returned boolean. The output is false true, as the boolean passed to fix is a new variable not changed in the original. The program defines a

Uploaded by

srmishra2006
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
177 views

Passa: Class Public Static Void New

The program defines a PassA class with a main method that creates a PassA object and calls its start method. The start method defines two long arrays, fixes one of the arrays by changing an element, and prints the sums of the arrays. The fix method changes an element of the passed array. The output is 15 15, as the fix method modifies the original array passed to it. The program defines a Test class with a main method that calls a start method. The start method defines a boolean, passes it to a fix method, and prints the original and returned boolean. The output is false true, as the boolean passed to fix is a new variable not changed in the original. The program defines a

Uploaded by

srmishra2006
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 52

1.  What will be the output of the program?

class PassA
{
public static void main(String [] args)
{
PassA p = new PassA();
p.start();
}

void start()
{
long [] a1 = {3,4,5};
long [] a2 = fix(a1);
System.out.print(a1[0] + a1[1] + a1[2] + " ");
System.out.println(a2[0] + a2[1] + a2[2]);
}

long [] fix(long [] a3)


{
a3[1] = 7;
return a3;
}
}

A. 12 15 B. 15 15

C. 345375 D. 375375

Answer & Explanation

Answer: Option B

Explanation:

Output: 15 15

The reference variables a1 and a3 refer to the same long array object. When the[1] element
is updated in the fix() method, it is updating the array referred to bya1. The reference
variable a2 refers to the same array object.

So Output: 3+7+5+" "3+7+5

Output: 15 15 Because Numeric values will be added

View Answer Workspace Report Discuss in Forum

2.  What will be the output of the program?

class Test
{
public static void main(String [] args)
{
Test p = new Test();
p.start();
}
void start()
{
boolean b1 = false;
boolean b2 = fix(b1);
System.out.println(b1 + " " + b2);
}

boolean fix(boolean b1)


{
b1 = true;
return b1;
}
}

A. true true B. false true

C. true false D. false false

Answer & Explanation

Answer: Option B

Explanation:

The boolean b1 in the fix() method is a different boolean than the b1 in


thestart() method. The b1 in the start() method is not updated by the fix()method.

View Answer Workspace Report Discuss in Forum

3.  What will be the output of the program?

class PassS
{
public static void main(String [] args)
{
PassS p = new PassS();
p.start();
}

void start()
{
String s1 = "slip";
String s2 = fix(s1);
System.out.println(s1 + " " + s2);
}

String fix(String s1)


{
s1 = s1 + "stream";
System.out.print(s1 + " ");
return "stream";
}
}

A. slip stream
B. slipstream stream

C. stream slip stream

D. slipstream slip stream

Answer & Explanation

Answer: Option D

Explanation:

When the fix() method is first entered, start()'s s1 and fix()'s s1 reference variables


both refer to the same String object (with a value of "slip"). Fix()'s s1 is reassigned to a new
object that is created when the concatenation occurs (this second String object has a value of
"slipstream"). When the program returns tostart(), another String object is created,
referred to by s2 and with a value of "stream".

View Answer Workspace Report Discuss in Forum

4.  What will be the output of the program?

class BitShift
{
public static void main(String [] args)
{
int x = 0x80000000;
System.out.print(x + " and ");
x = x >>> 31;
System.out.println(x);
}
}

A. -2147483648 and 1

B. 0x80000000 and 0x00000001

C. -2147483648 and -1

D. 1 and -2147483648

Answer & Explanation

Answer: Option A

Explanation:

Option A is correct. The >>> operator moves all bits to the right, zero filling the left bits. The
bit transformation looks like this:

Before: 1000 0000 0000 0000 0000 0000 0000 0000


After: 0000 0000 0000 0000 0000 0000 0000 0001

Option C is incorrect because the >>> operator zero fills the left bits, which in this case
changes the sign of x, as shown.

Option B is incorrect because the output method print() always displays integers in base 10.

Option D is incorrect because this is the reverse order of the two output numbers.

View Answer Workspace Report Discuss in Forum

5.  What will be the output of the program?

class Equals
{
public static void main(String [] args)
{
int x = 100;
double y = 100.1;
boolean b = (x = y); /* Line 7 */
System.out.println(b);
}
}

A. true

B. false

C. Compilation fails

D. An exception is thrown at runtime

Answer & Explanation

Answer: Option C

Explanation:

The code will not compile because in line 7, the line will work only if we use (x==y)in the line.
The == operator compares values to produce a boolean, whereas the =operator assigns a
value to variables.

Option A, B, and D are incorrect because the code does not get as far as compiling. If we
corrected this code, the output would be false.

View Answer Workspace Report Discuss in Forum

6.  What will be the output of the program?

class Test
{
public static void main(String [] args)
{
int x=20;
String sup = (x < 15) ? "small" : (x < 22)? "tiny" : "huge";
System.out.println(sup);
}
}

A. small B. tiny

C. huge D. Compilation fails

Answer & Explanation

Answer: Option B

Explanation:

This is an example of a nested ternary operator. The second evaluation (x < 22)is true, so
the "tiny" value is assigned to sup.

View Answer Workspace Report Discuss in Forum

7.  What will be the output of the program?

class Test
{
public static void main(String [] args)
{
int x= 0;
int y= 0;
for (int z = 0; z < 5; z++)
{
if (( ++x > 2 ) && (++y > 2))
{
x++;
}
}
System.out.println(x + " " + y);
}
}

A. 52 B. 53

C. 63 D. 64

Answer & Explanation

Answer: Option C

Explanation:

In the first two iterations x is incremented once and y is not because of the short
circuit && operator. In the third and forth iterations x and y are each incremented, and in the
fifth iteration x is doubly incremented and y is incremented.
View Answer Workspace Report Discuss in Forum

8.  What will be the output of the program?

class Test
{
public static void main(String [] args)
{
int x= 0;
int y= 0;
for (int z = 0; z < 5; z++)
{
if (( ++x > 2 ) || (++y > 2))
{
x++;
}
}
System.out.println(x + " " + y);
}
}

A. 53 B. 82

C. 83 D. 85

Answer & Explanation

Answer: Option B

Explanation:

The first two iterations of the for loop both x and y are incremented. On the third


iteration x is incremented, and for the first time becomes greater than 2. The short circuit or
operator || keeps y from ever being incremented again and x is incremented twice on each of
the last three iterations.

View Answer Workspace Report Discuss in Forum

9.  What will be the output of the program?

class Bitwise
{
public static void main(String [] args)
{
int x = 11 & 9;
int y = x ^ 3;
System.out.println( y | 12 );
}
}

A. 0 B. 7

C. 8 D. 14

Answer & Explanation


Answer: Option D

Explanation:

The & operator produces a 1 bit when both bits are 1. The result of the & operation is 9.
The ^ operator produces a 1 bit when exactly one bit is 1; the result of this operation is 10.
The | operator produces a 1 bit when at least one bit is 1; the result of this operation is 14.

View Answer Workspace Report Discuss in Forum

10.  What will be the output of the program?

class SSBool
{
public static void main(String [] args)
{
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;
if ( b1 & b2 | b2 & b3 | b2 ) /* Line 8 */
System.out.print("ok ");
if ( b1 & b2 | b2 & b3 | b2 | b1 ) /*Line 10*/
System.out.println("dokey");
}
}

A. ok

B. dokey

C. ok dokey

D. No output is produced

E. Compilation error

Answer & Explanation

Answer: Option B

Explanation:

The & operator has a higher precedence than the | operator so that on line 8 b1and b2 are


evaluated together as are b2 & b3. The final b1 in line 10 is what causes that if test to be
true. Hence it prints "dokey".

11.  What will be the output of the program?

class SC2
{
public static void main(String [] args)
{
SC2 s = new SC2();
s.start();
}

void start()
{
int a = 3;
int b = 4;
System.out.print(" " + 7 + 2 + " ");
System.out.print(a + b);
System.out.print(" " + a + b + " ");
System.out.print(foo() + a + b + " ");
System.out.println(a + b + foo());
}

String foo()
{
return "foo";
}
}

A. 9 7 7 foo 7 7foo

B. 72 34 34 foo34 34foo

C. 9 7 7 foo34 34foo

D. 72 7 34 foo34 7foo

Answer & Explanation

Answer: Option D

Explanation:

Because all of these expressions use the + operator, there is no precedence to worry about
and all of the expressions will be evaluated from left to right. If either operand being evaluated
is a String, the + operator will concatenate the two operands; if both operands are numeric,
the + operator will add the two operands.

View Answer Workspace Report Discuss in Forum

12.  What will be the output of the program?

class Test
{
static int s;
public static void main(String [] args)
{
Test p = new Test();
p.start();
System.out.println(s);
}
void start()
{
int x = 7;
twice(x);
System.out.print(x + " ");
}

void twice(int x)
{
x = x*2;
s = x;
}
}

A. 77 B. 7 14

C. 14 0 D. 14 14

Answer & Explanation

Answer: Option B

Explanation:

The int x in the twice() method is not the same int x as in


the start()method. Start()'s x is not affected by the twice() method. The instance
variables is updated by twice()'s x, which is 14.

View Answer Workspace Report Discuss in Forum

13.  What will be the output of the program?

class Two
{
byte x;
}

class PassO
{
public static void main(String [] args)
{
PassO p = new PassO();
p.start();
}

void start()
{
Two t = new Two();
System.out.print(t.x + " ");
Two t2 = fix(t);
System.out.println(t.x + " " + t2.x);
}

Two fix(Two tt)


{
tt.x = 42;
return tt;
}
}

A. null null 42 B. 0 0 42

C. 0 42 42 D. 000

Answer & Explanation

Answer: Option C

Explanation:

In the fix() method, the reference variable tt refers to the same object (classTwo) as


the t reference variable. Updating tt.x in the fix() method updates t.x(they are one in
the same object). Remember also that the instance variable x in the Two class is initialized to
0.

View Answer Workspace Report Discuss in Forum

14.  What will be the output of the program?

class BoolArray
{
boolean [] b = new boolean[3];
int count = 0;

void set(boolean [] x, int i)


{
x[i] = true;
++count;
}

public static void main(String [] args)


{
BoolArray ba = new BoolArray();
ba.set(ba.b, 0);
ba.set(ba.b, 2);
ba.test();
}

void test()
{
if ( b[0] && b[1] | b[2] )
count++;
if ( b[1] && b[(++count - 2)] )
count += 7;
System.out.println("count = " + count);
}
}

A. count = 0 B. count = 2

C. count = 3 D. count = 4

Answer & Explanation


Answer: Option C

Explanation:

The reference variables b and x both refer to the same boolean array. count is incremented


for each call to the set() method, and once again when the first if test is true. Because of
the && short circuit operator, count is not incremented during the second if test.

View Answer Workspace Report Discuss in Forum

15.  What will be the output of the program?

public class Test


{
public static void leftshift(int i, int j)
{
i <<= j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j);
System.out.printIn(i);
}
}

A. 2 B. 4

C. 8 D. 16

Answer & Explanation

Answer: Option B

Explanation:

Java only ever passes arguments to a method by value (i.e. a copy of the variable) and never
by reference. Therefore the value of the variable i remains unchanged in the main method.

If you are clever you will spot that 16 is 4 multiplied by 2 twice, (4 * 2 * 2) = 16. If you had
16 left shifted by three bits then 16 * 2 * 2 * 2 = 128. If you had 128 right shifted by 2 bits
then 128 / 2 / 2 = 32. Keeping these points in mind, you don't have to go converting to binary
to do the left and right bit shifts.

1.  Which four options describe the correct default values for array elements of the types
indicated?

1. int -> 0
2. String -> "null"
3. Dog -> null
4. char -> '\u0000'
5. float -> 0.0f
6. boolean -> true

A. 1, 2, 3, 4 B. 1, 3, 4, 5

C. 2, 4, 5, 6 D. 3, 4, 5, 6

Answer & Explanation

Answer: Option B

Explanation:

(1), (3), (4), (5) are the correct statements.

(2) is wrong because the default value for a String (and any other object reference) is null,
with no quotes.

(6) is wrong because the default value for boolean elements is false.

View Answer Workspace Report Discuss in Forum

2.  Which one of these lists contains only Java programming language keywords?

A. class, if, void, long, Int, continue

B. goto, instanceof, native, finally, default, throws

C. try, virtual, throw, final, volatile, transient

D. strictfp, constant, super, implements, do

E. byte, break, assert, switch, include

Answer & Explanation

Answer: Option B

Explanation:

All the words in option B are among the 49 Java keywords. Although goto reserved as a
keyword in Java, goto is not used and has no function.

Option A is wrong because the keyword for the primitive int starts with a lowercase i.

Option C is wrong because "virtual" is a keyword in C++, but not Java.

Option D is wrong because "constant" is not a keyword. Constants in Java are


marked static and final.
Option E is wrong because "include" is a keyword in C, but not in Java.

View Answer Workspace Report Discuss in Forum

3.  Which will legally declare, construct, and initialize an array?

A. int [] myList = {"1", "2", "3"};

B. int [] myList = (5, 8, 2);

C. int myList [] [] = {4,9,7,0};

D. int myList [] = {4, 3, 7};

Answer & Explanation

Answer: Option D

Explanation:

The only legal array declaration and assignment statement is Option D

Option A is wrong because it initializes an int array with String literals.

Option B is wrong because it use something other than curly braces for the initialization.

Option C is wrong because it provides initial values for only one dimension, although the
declared array is a two-dimensional array.

View Answer Workspace Report Discuss in Forum

4.  Which is a reserved word in the Java programming language?

A. method B. native

C. subclasses D. reference

E. array

Answer & Explanation

Answer: Option B

Explanation:

The word "native" is a valid keyword, used to modify a method declaration.

Option A, D and E are not keywords. Option C is wrong because the keyword for subclassing in
Java is extends, not 'subclasses'.

View Answer Workspace Report Discuss in Forum


5.  Which is a valid keyword in java?

A. interface B. string

C. Float D. unsigned

Answer & Explanation

Answer: Option A

Explanation:

interface is a valid keyword.

Option B is wrong because although "String" is a class type in Java, "string" is not a
keyword.

Option C is wrong because "Float" is a class type. The keyword for the Java primitive
is float.

Option D is wrong because "unsigned" is a keyword in C/C++ but not in Java.

6.  Which three are legal array declarations?

1. int [] myScores [];


2. char [] myChars;
3. int [6] myScores;
4. Dog myDogs [];
5. Dog myDogs [7];

A. 1, 2, 4 B. 2, 4, 5

C. 2, 3, 4 D. All are correct.

Answer & Explanation

Answer: Option A

Explanation:

(1), (2), and (4) are legal array declarations. With an array declaration, you can place
the brackets to the right or left of the identifier. Option A looks strange, but it's perfectly
legal to split the brackets in a multidimensional array, and place them on both sides of
the identifier. Although coding this way would only annoy your fellow programmers, for
the exam, you need to know it's legal.

(3) and (5) are wrong because you can't declare an array with a size. The size is only
needed when the array is actually instantiated (and the JVM needs to know how much
space to allocate for the array, based on the type of array and the size).
View Answer Workspace Report Discuss in Forum

7. 
public interface Foo
{
int k = 4; /* Line 3 */
}

Which three piece of codes are equivalent to line 3?

1. final int k = 4;
2. public int k = 4;
3. static int k = 4;
4. abstract int k = 4;
5. volatile int k = 4;
6. protected int k = 4;

A. 1, 2 and 3 B. 2, 3 and 4

C. 3, 4 and 5 D. 4, 5 and 6

Answer & Explanation

Answer: Option A

Explanation:

(1), (2) and (3) are correct. Interfaces can have constants, which are always
implicitly public, static, and final. Interface constant declarations
of public,static, and final are optional in any combination.

View Answer Workspace Report Discuss in Forum

8.  Which one of the following will declare an array and initialize it with five numbers?

A. Array a = new Array(5);

B. int [] a = {23,22,21,20,19};

C. int a [] = new int[5];

D. int [5] array;

Answer & Explanation

Answer: Option B

Explanation:

Option B is the legal way to declare and initialize an array with five elements.

Option A is wrong because it shows an example of instantiating a class namedArray,


passing the integer value 5 to the object's constructor. If you don't see the brackets,
you can be certain there is no actual array object! In other words, anArray object
(instance of class Array) is not the same as an array object.

Option C is wrong because it shows a legal array declaration, but with no initialization.

Option D is wrong (and will not compile) because it declares an array with a size.
Arrays must never be given a size when declared.

View Answer Workspace Report Discuss in Forum

9.  Which three are valid declarations of a char?

1. char c1 = 064770;
2. char c2 = 'face';
3. char c3 = 0xbeef;
4. char c4 = \u0022;
5. char c5 = '\iface';
6. char c6 = '\uface';

A. 1, 2, 4

B. 1, 3, 6

C. 3, 5

D. 5 only

Answer & Explanation

Answer: Option B

Explanation:

(1), (3), and (6) are correct. char c1 = 064770; is an octal representation of the
integer value 27128, which is legal because it fits into an unsigned 16-bit integer.char
c3 = 0xbeef; is a hexadecimal representation of the integer value 48879, which fits
into an unsigned 16-bit integer. char c6 = '\uface'; is a Unicode representation of
a character.

char c2 = 'face'; is wrong because you can't put more than one character in a char
literal. The only other acceptable char literal that can go between single quotes is a
Unicode value, and Unicode literals must always start with a '\u'.

char c4 = \u0022; is wrong because the single quotes are missing.

char c5 = '\iface'; is wrong because it appears to be a Unicode representation


(notice the backslash), but starts with '\i' rather than '\u'.

View Answer Workspace Report Discuss in Forum


10.  Which is the valid declarations within an interface definition?

A. public double methoda();

B. public final double methoda();

C. static void methoda(double d1);

D. protected void methoda(double d1);

Answer & Explanation

Answer: Option A

Explanation:

Option A is correct. A public access modifier is acceptable. The method prototypes in


an interface are all abstract by virtue of their declaration, and should not be
declared abstract.

Option B is wrong. The final modifier means that this method cannot be constructed in


a subclass. A final method cannot be abstract.

Option C is wrong. static is concerned with the class and not an instance.

Option D is wrong. protected is not permitted when declaring a method of an


interface. See information below.

Member declarations in an interface disallow the use of some declaration modifiers; you
cannot use transient, volatile, or synchronized in a member declaration in an
interface. Also, you may not use the private and protected specifiers when declaring
members of an interface.

11.  Which one is a valid declaration of a boolean?

A. boolean b1 = 0;

B. boolean b2 = 'false';

C. boolean b3 = false;

D. boolean b4 = Boolean.false();

E. boolean b5 = no;

Answer & Explanation

Answer: Option C
Explanation:

A boolean can only be assigned the literal true or false.

View Answer Workspace Report Discuss in Forum

12.  Which three are valid declarations of a float?

1. float f1 = -343;
2. float f2 = 3.14;
3. float f3 = 0x12345;
4. float f4 = 42e7;
5. float f5 = 2001.0D;
6. float f6 = 2.81F;

A. 1, 2, 4 B. 2, 3, 5

C. 1, 3, 6 D. 2, 4, 6

Answer & Explanation

Answer: Option C

Explanation:

(1) and (3) are integer literals (32 bits), and integers can be legally assigned tofloats (also
32 bits). (6) is correct because (F) is appended to the literal, declaring it as a float rather
than a double (the default for floating point literals).

(2), (4),and (5) are all doubles.

View Answer Workspace Report Discuss in Forum

13.  Which is a valid declarations of a String?

A. String s1 = null;

B. String s2 = 'null';

C. String s3 = (String) 'abc';

D. String s4 = (String) '\ufeed';

Answer & Explanation

Answer: Option A

Explanation:
Option A sets the String reference to null.

Option B is wrong because null cannot be in single quotes.

Option C is wrong because there are multiple characters between the single quotes ('abc').

Option D is wrong because you can't cast a char (primitive) to a String (object).

View Answer Workspace Report Discuss in Forum

14.  What is the numerical range of a char?

A. -128 to 127 B. -(215) to (215) - 1

C. 0 to 32767 D. 0 to 65535

Answer & Explanation

Answer: Option D

Explanation:

A char is really a 16-bit integer behind the scenes, so it supports 216 (from 0 to 65535)
values.

1.  What will be the output of the program?

public class Foo


{
public static void main(String[] args)
{
try
{
return;
}
finally
{
System.out.println( "Finally" );
}
}
}

A. Finally

B. Compilation fails.

C. The code runs with no output.

D. An exception is thrown at runtime.

Answer & Explanation


Answer: Option A

Explanation:

If you put a finally block after a try and its associated catch blocks, then once execution enters
the try block, the code in that finally block will definitely be executed except in the following
circumstances:

1. An exception arising in the finally block itself.


2. The death of the thread.
3. The use of System.exit()
4. Turning off the power to the CPU.

I suppose the last three could be classified as VM shutdown.

View Answer Workspace Report Discuss in Forum

2.  What will be the output of the program?

try
{
int x = 0;
int y = 5 / x;
}
catch (Exception e)
{
System.out.println("Exception");
}
catch (ArithmeticException ae)
{
System.out.println(" Arithmetic Exception");
}
System.out.println("finished");

A. finished B. Exception

C. Compilation fails. D. Arithmetic Exception

Answer & Explanation

Answer: Option C

Explanation:

Compilation fails because ArithmeticException has already been


caught.ArithmeticException is a subclass of java.lang.Exception, by time
theArithmeticException has been specified it has already been caught by
theException class.

If ArithmeticException appears before Exception, then the file will compile. When


catching exceptions the more specific exceptions must be listed before the more general (the
subclasses must be caught before the superclasses).
View Answer Workspace Report Discuss in Forum

3.  What will be the output of the program?

public class X
{
public static void main(String [] args)
{
try
{
badMethod();
System.out.print("A");
}
catch (Exception ex)
{
System.out.print("B");
}
finally
{
System.out.print("C");
}
System.out.print("D");
}
public static void badMethod()
{
throw new Error(); /* Line 22 */
}
}

A. ABCD

B. Compilation fails.

C. C is printed before exiting with an error message.

D. BC is printed before exiting with an error message.

Answer & Explanation

Answer: Option C

Explanation:

Error is thrown but not recognised line(22) because the only catch attempts to catch
an Exception and Exception is not a superclass of Error. Therefore only the code in
the finally statement can be run before exiting with a runtime error (Exception in thread
"main" java.lang.Error).

View Answer Workspace Report Discuss in Forum

4.  What will be the output of the program?

public class X
{
public static void main(String [] args)
{
try
{
badMethod();
System.out.print("A");
}
catch (RuntimeException ex) /* Line 10 */
{
System.out.print("B");
}
catch (Exception ex1)
{
System.out.print("C");
}
finally
{
System.out.print("D");
}
System.out.print("E");
}
public static void badMethod()
{
throw new RuntimeException();
}
}

A. BD B. BCD

C. BDE D. BCDE

Answer & Explanation

Answer: Option C

Explanation:

A Run time exception is thrown and caught in the catch statement on line 10. All the code
after the finally statement is run because the exception has been caught.

View Answer Workspace Report Discuss in Forum

5.  What will be the output of the program?

public class RTExcept


{
public static void throwit ()
{
System.out.print("throwit ");
throw new RuntimeException();
}
public static void main(String [] args)
{
try
{
System.out.print("hello ");
throwit();
}
catch (Exception re )
{
System.out.print("caught ");
}
finally
{
System.out.print("finally ");
}
System.out.println("after ");
}
}

A. hello throwit caught

B. Compilation fails

C. hello throwit RuntimeException caught after

D. hello throwit caught finally after

Answer & Explanation

Answer: Option D

Explanation:

The main() method properly catches and handles the RuntimeException in the catch block,


finally runs (as it always does), and then the code returns to normal.

A, B and C are incorrect based on the program logic described above. Remember that properly
handled exceptions do not cause the program to stop executing.

6.  What will be the output of the program?

public class Test


{
public static void aMethod() throws Exception
{
try /* Line 5 */
{
throw new Exception(); /* Line 7 */
}
finally /* Line 9 */
{
System.out.print("finally "); /* Line 11 */
}
}
public static void main(String args[])
{
try
{
aMethod();
}
catch (Exception e) /* Line 20 */
{
System.out.print("exception ");
}
System.out.print("finished"); /* Line 24 */
}
}

A. finally

B. exception finished

C. finally exception finished

D. Compilation fails

Answer & Explanation

Answer: Option C

Explanation:

This is what happens:

(1) The execution of the try block (line 5) completes abruptly because of the throwstatement


(line 7).

(2) The exception cannot be assigned to the parameter of any catch clause of
thetry statement therefore the finally block is executed (line 9) and "finally" is output (line
11).

(3) The finally block completes normally, and then the try statement completes abruptly


because of the throw statement (line 7).

(4) The exception is propagated up the call stack and is caught by the catch in the main
method (line 20). This prints "exception".

(5) Lastly program execution continues, because the exception has been caught, and
"finished" is output (line 24).

View Answer Workspace Report Discuss in Forum

7.  What will be the output of the program?

public class X
{
public static void main(String [] args)
{
try
{
badMethod();
System.out.print("A");
}
catch (Exception ex)
{
System.out.print("B");
}
finally
{
System.out.print("C");
}
System.out.print("D");
}
public static void badMethod() {}
}

A. AC B. BC

C. ACD D. ABCD

Answer & Explanation

Answer: Option C

Explanation:

There is no exception thrown, so all the code with the exception of the catch statement block
is run.

View Answer Workspace Report Discuss in Forum

8.  What will be the output of the program?

public class X
{
public static void main(String [] args)
{
try
{
badMethod(); /* Line 7 */
System.out.print("A");
}
catch (Exception ex) /* Line 10 */
{
System.out.print("B"); /* Line 12 */
}
finally /* Line 14 */
{
System.out.print("C"); /* Line 16 */
}
System.out.print("D"); /* Line 18 */
}
public static void badMethod()
{
throw new RuntimeException();
}
}

A. AB B. BC

C. ABC D. BCD
Answer & Explanation

Answer: Option D

Explanation:

(1) A RuntimeException is thrown, this is a subclass of exception.

(2) The exception causes the try to complete abruptly (line 7) therefore line 8 is never
executed.

(3) The exception is caught (line 10) and "B" is output (line 12)

(4) The finally block (line 14) is always executed and "C" is output (line 16).

(5) The exception was caught, so the program continues with line 18 and outputs "D".

View Answer Workspace Report Discuss in Forum

9.  What will be the output of the program?

public class MyProgram


{
public static void main(String args[])
{
try
{
System.out.print("Hello world ");
}
finally
{
System.out.println("Finally executing ");
}
}
}

A. Nothing. The program will not compile because no exceptions are specified.

B. Nothing. The program will not compile because no catch clauses are specified.

C. Hello world.

D. Hello world Finally executing

Answer & Explanation

Answer: Option D

Explanation:

Finally clauses are always executed. The program will first execute the try block, printing
Hello world, and will then execute the finally block, printing Finally executing.

Option A, B, and C are incorrect based on the program logic described above. Remember that
either a catch or a finally statement must follow a try. Since the finally is present, the catch is
not required.

View Answer Workspace Report Discuss in Forum

10.  What will be the output of the program?

class Exc0 extends Exception { }


class Exc1 extends Exc0 { } /* Line 2 */
public class Test
{
public static void main(String args[])
{
try
{
throw new Exc1(); /* Line 9 */
}
catch (Exc0 e0) /* Line 11 */
{
System.out.println("Ex0 caught");
}
catch (Exception e)
{
System.out.println("exception caught");
}
}
}

A. Ex0 caught

B. exception caught

C. Compilation fails because of an error at line 2.

D. Compilation fails because of an error at line 9.

Answer & Explanation

Answer: Option A

Explanation:

An exception Exc1 is thrown and is caught by the catch statement on line 11. The code is
executed in this block. There is no finally block of code to execute.

1.  Suppose that you would like to create an instance of a new Map that has an iteration order
that is the same as the iteration order of an existing instance of a Map. Which concrete
implementation of the Map interface should be used for the new instance?

A. TreeMap
B. HashMap

C. LinkedHashMap

D. The answer depends on the implementation of the existing instance.

Answer & Explanation

Answer: Option C

Explanation:

The iteration order of a Collection is the order in which an iterator moves through the
elements of the Collection. The iteration order of a LinkedHashMap is determined by the
order in which elements are inserted.

When a new LinkedHashMap is created by passing a reference to an existing Collection to the


constructor of a LinkedHashMap the Collection.addAll method will ultimately be
invoked.

The addAll method uses an iterator to the existing Collection to iterate through the elements of
the existing Collection and add each to the instance of the newLinkedHashMap.

Since the iteration order of the LinkedHashMap is determined by the order of insertion, the
iteration order of the new LinkedHashMap must be the same as the interation order of the
old Collection.

View Answer Workspace Report Discuss in Forum

2.  Which class does not override the equals() and hashCode() methods, inheriting them


directly from class Object?

A. java.lang.String B. java.lang.Double

C. java.lang.StringBuffer D. java.lang.Character

Answer & Explanation

Answer: Option C

Explanation:

java.lang.StringBuffer is the only class in the list that uses the default methods
provided by class Object.

View Answer Workspace Report Discuss in Forum

3.  Which collection class allows you to grow or shrink its size and provides indexed access to its
elements, but whose methods are not synchronized?

A. java.util.HashSet B. java.util.LinkedHashSet
C. java.util.List D. java.util.ArrayList

Answer & Explanation

Answer: Option D

Explanation:

All of the collection classes allow you to grow or shrink the size of your
collection.ArrayList provides an index to its elements. The newer collection classes tend not
to have synchronized methods. Vector is an older implementation of ArrayListfunctionality
and has synchronized methods; it is slower than ArrayList.

View Answer Workspace Report Discuss in Forum

4.  You need to store elements in a collection that guarantees that no duplicates are stored and all
elements can be accessed in natural order. Which interface provides that capability?

A. java.util.Map B. java.util.Set

C. java.util.List D. java.util.Collection

Answer & Explanation

Answer: Option B

Explanation:

Option B is correct. A set is a collection that contains no duplicate elements. The iterator
returns the elements in no particular order (unless this set is an instance of some class that
provides a guarantee). A map cannot contain duplicate keys but it may contain duplicate
values. List and Collection allow duplicate elements.

Option A is wrong. A map is an object that maps keys to values. A map cannot contain
duplicate keys; each key can map to at most one value. The Map interface provides three
collection views, which allow a map's contents to be viewed as a set of keys, collection of
values, or set of key-value mappings. The order of a map is defined as the order in which the
iterators on the map's collection views return their elements. Some map implementations, like
the TreeMap class, make specific guarantees as to their order (ascending key order); others,
like the HashMap class, do not (does not guarantee that the order will remain constant over
time).

Option C is wrong. A list is an ordered collection (also known as a sequence). The user of this
interface has precise control over where in the list each element is inserted. The user can
access elements by their integer index (position in the list), and search for elements in the list.
Unlike sets, lists typically allow duplicate elements.

Option D is wrong. A collection is also known as a sequence. The user of this interface has
precise control over where in the list each element is inserted. The user can access elements
by their integer index (position in the list), and search for elements in the list. Unlike sets, lists
typically allow duplicate elements.

View Answer Workspace Report Discuss in Forum


5.  Which interface does java.util.Hashtable implement?

A. Java.util.Map B. Java.util.List

C. Java.util.HashTable D. Java.util.Collection

Answer & Explanation

Answer: Option A

Explanation:

Hash table based implementation of the Map interface.

6.  Which interface provides the capability to store objects using a key-value pair?

A. Java.util.Map B. Java.util.Set

C. Java.util.List D. Java.util.Collection

Answer & Explanation

Answer: Option A

Explanation:

An object that maps keys to values. A map cannot contain duplicate keys; each key can map
to at most one value.

View Answer Workspace Report Discuss in Forum

7.  Which collection class allows you to associate its elements with key values, and allows you to
retrieve objects in FIFO (first-in, first-out) sequence?

A. java.util.ArrayList B. java.util.LinkedHashMap

C. java.util.HashMap D. java.util.TreeMap

Answer & Explanation

Answer: Option B

Explanation:

LinkedHashMap is the collection class used for caching purposes. FIFO is another way to
indicate caching behavior. To retrieve LinkedHashMap elements in cached order, use
the values() method and iterate over the resultant collection.

View Answer Workspace Report Discuss in Forum


8.  Which collection class allows you to access its elements by associating a key with an element's
value, and provides synchronization?

A. java.util.SortedMap B. java.util.TreeMap

C. java.util.TreeSet D. java.util.Hashtable

Answer & Explanation

Answer: Option D

Explanation:

Hashtable is the only class listed that provides synchronized methods. If you need
synchronization great; otherwise, use HashMap, it's faster.

View Answer Workspace Report Discuss in Forum

9.  Which is valid declaration of a float?

A. float f = 1F; B. float f = 1.0;

C. float f = "1"; D. float f = 1.0d;

Answer & Explanation

Answer: Option A

Explanation:

Option A is valid declaration of float.

Option B is incorrect because any literal number with a decimal point u declare the computer
will implicitly cast to double unless you include "F or f"

Option C is incorrect because it is a String.

Option D is incorrect because "d" tells the computer it is a double so therefore you are trying
to put a double value into a float variable i.e there might be a loss of precision.

View Answer Workspace Report Discuss in Forum

10. 
/* Missing Statement ? */
public class foo
{
public static void main(String[]args)throws Exception
{
java.io.PrintWriter out = new java.io.PrintWriter();
new java.io.OutputStreamWriter(System.out,true);
out.println("Hello");
}
}

What line of code should replace the missing statement to make this program compile?
A. No statement required.

B. import java.io.*;

C. include java.io.*;

D. import java.io.PrintWriter;

Answer & Explanation

Answer: Option A

Explanation:

The usual method for using/importing the java packages/classes is by using an import
statement at the top of your code. However it is possible to explicitly import the specific class
that you want to use as you use it which is shown in the code above. The disadvantage of this
however is that every time you create a new object you will have to use the class path in the
case "java.io" then the class name in the long run leading to a lot more typing.

11.  What is the numerical range of char?

A. 0 to 32767 B. 0 to 65535

C. -256 to 255 D. -32768 to 32767

Answer & Explanation

Answer: Option B

Explanation:

The char type is integral but unsigned. The range of a variable of type char is from 0 to 216-
1 or 0 to 65535. Java characters are Unicode, which is a 16-bit encoding capable of
representing a wide range of international characters. If the most significant nine bits of
a char are 0, then the encoding is the same as seven-bit ASCII.

View Answer Workspace Report Discuss in Forum

12.  Which of the following are Java reserved words?

1. run
2. import
3. default
4. implement

A. 1 and 2 B. 2 and 3

C. 3 and 4 D. 2 and 4

Answer & Explanation


Answer: Option B

Explanation:

(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

1. 
void start() {
A a = new A();
B b = new B();
a.s(b);
b = null; /* Line 5 */
a = null; /* Line 6 */
System.out.println("start completed"); /* Line 7 */
}

When is the B object, created in line 3, eligible for garbage collection?

A. after line 5

B. after line 6

C. after line 7

D. There is no way to be absolutely certain.

Answer & Explanation

Answer: Option D

Explanation:

No answer description available for this question. Let us discuss.

View Answer Workspace Report Discuss in Forum

2. 
class HappyGarbage01
{
public static void main(String args[])
{
HappyGarbage01 h = new HappyGarbage01();
h.methodA(); /* Line 6 */
}
Object methodA()
{
Object obj1 = new Object();
Object [] obj2 = new Object[1];
obj2[0] = obj1;
obj1 = null;
return obj2[0];
}
}

Where will be the most chance of the garbage collector being invoked?

A. After line 9

B. After line 10

C. After line 11

D. Garbage collector never invoked in methodA()

Answer & Explanation

Answer: Option D

Explanation:

Option D is correct. Garbage collection takes place after the method has returned its reference
to the object. The method returns to line 6, there is no reference to store the return value. so
garbage collection takes place after line 6.

Option A is wrong. Because the reference to obj1 is stored in obj2[0]. The Objectobj1 still
exists on the heap and can be accessed by an active thread through the reference stored
in obj2[0].

Option B is wrong. Because it is only one of the references to the object obj1, the other
reference is maintained in obj2[0].

Option C is wrong. The garbage collector will not be called here because a reference to the
object is being maintained and returned in obj2[0].

View Answer Workspace Report Discuss in Forum

3. 
class Bar { }
class Test
{
Bar doBar()
{
Bar b = new Bar(); /* Line 6 */
return b; /* Line 7 */
}
public static void main (String args[])
{
Test t = new Test(); /* Line 11 */
Bar newBar = t.doBar(); /* Line 12 */
System.out.println("newBar");
newBar = new Bar(); /* Line 14 */
System.out.println("finishing"); /* Line 15 */
}
}

At what point is the Bar object, created on line 6, eligible for garbage collection?

A. after line 12

B. after line 14

C. after line 7, when doBar() completes

D. after line 15, when main() completes

Answer & Explanation

Answer: Option B

Explanation:

Option B is correct. All references to the Bar object created on line 6 are destroyed when a
new reference to a new Bar object is assigned to the variable newBar on line 14. Therefore
the Bar object, created on line 6, is eligible for garbage collection after line 14.

Option A is wrong. This actually protects the object from garbage collection.

Option C is wrong. Because the reference in the doBar() method is returned on line 7 and is


stored in newBar on line 12. This preserver the object created on line 6.

Option D is wrong. Not applicable because the object is eligible for garbage collection after line
14.

View Answer Workspace Report Discuss in Forum

4. 
class Test
{
private Demo d;
void start()
{
d = new Demo();
this.takeDemo(d); /* Line 7 */
} /* Line 8 */
void takeDemo(Demo demo)
{
demo = null;
demo = new Demo();
}
}

When is the Demo object eligible for garbage collection?

A. After line 7

B. After line 8
C. After the start() method completes

D. When the instance running this code is made eligible for garbage collection.

Answer & Explanation

Answer: Option D

Explanation:

Option D is correct. By a process of elimination.

Option A is wrong. The variable d is a member of the Test class and is never directly set to
null.

Option B is wrong. A copy of the variable d is set to null and not the actual variabled.

Option C is wrong. The variable d exists outside the start() method (it is a class member).


So, when the start() method finishes the variable d still holds a reference.

View Answer Workspace Report Discuss in Forum

5. 
public class X
{
public static void main(String [] args)
{
X x = new X();
X x2 = m1(x); /* Line 6 */
X x4 = new X();
x2 = x4; /* Line 8 */
doComplexStuff();
}
static X m1(X mx)
{
mx = new X();
return mx;
}
}

After line 8 runs. how many objects are eligible for garbage collection?

A. 0  B. 1

C. 2 D. 3

Answer & Explanation

Answer: Option B

Explanation:

By the time line 8 has run, the only object without a reference is the one generated as a result
of line 6. Remember that "Java is pass by value," so the reference variable x is not affected by
the m1() method.
Ref: http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

6. 
public Object m()
{
Object o = new Float(3.14F);
Object [] oa = new Object[l];
oa[0] = o; /* Line 5 */
o = null; /* Line 6 */
oa[0] = null; /* Line 7 */
return o; /* Line 8 */
}

When is the Float object, created in line 3, eligible for garbage collection?

A. just after line 5 B. just after line 6

C. just after line 7 D. just after line 8

Answer & Explanation

Answer: Option C

Explanation:

Option A is wrong. This simply copies the object reference into the array.

Option B is wrong. The reference o is set to null, but, oa[0] still maintains the reference to
the Float object.

Option C is correct. The thread of execution will then not have access to the object.

View Answer Workspace Report Discuss in Forum

7. 
class X2
{
public X2 x;
public static void main(String [] args)
{
X2 x2 = new X2(); /* Line 6 */
X2 x3 = new X2(); /* Line 7 */
x2.x = x3;
x3.x = x2;
x2 = new X2();
x3 = x2; /* Line 11 */
doComplexStuff();
}
}

after line 11 runs, how many objects are eligible for garbage collection?

A. 0 B. 1

C. 2 D. 3

Answer & Explanation


Answer: Option C

Explanation:

This is an example of the islands of isolated objects. By the time line 11 has run, the objects
instantiated in lines 6 and 7 are referring to each other, but no live thread can reach either of
them.

View Answer Workspace Report Discuss in Forum

8.  What allows the programmer to destroy an object x?

A. x.delete()

B. x.finalize()

C. Runtime.getRuntime().gc()

D. Only the garbage collection system can destroy an object.

Answer & Explanation

Answer: Option D

Explanation:

Option D is correct. When an object is no longer referenced, it may be reclaimed by the


garbage collector. If an object declares a finalizer, the finalizer is executed before the object is
reclaimed to give the object a last chance to clean up resources that would not otherwise be
released. When a class is no longer needed, it may be unloaded.

Option A is wrong. I found 4 delete() methods in all of the Java class structure. They are:

1. delete() - Method in class java.io.File : Deletes the file or directory denoted by


this abstract pathname.
2. delete(int, int) - Method in class java.lang.StringBuffer : Removes the
characters in a substring of this StringBuffer.
3. delete(int, int) - Method in
interfacejavax.accessibility.AccessibleEditableText : Deletes the text
between two indices
4. delete(int, int) - Method in
class :javax.swing.text.JTextComponent.AccessibleJTextComponent;
Deletes the text between two indices

None of these destroy the object to which they belong.

Option B is wrong. I found 19 finalize() methods. The most interesting, from this


questions point of view, was the finalize() method in class java.lang.Objectwhich is
called by the garbage collector on an object when garbage collection determines that there are
no more references to the object. This method does not destroy the object to which it belongs.

Option C is wrong. But it is interesting. The Runtime class has many methods, two of which
are:

1. getRuntime() - Returns the runtime object associated with the current Java
application.
2. gc() - Runs the garbage collector. Calling this method suggests that the Java virtual
machine expend effort toward recycling unused objects in order to make the memory
they currently occupy available for quick reuse. When control returns from the method
call, the virtual machine has made its best effort to recycle all discarded objects.
Interesting as this is, it doesn't destroy the object.

1.  You want subclasses in any package to have access to members of a superclass. Which is the
most restrictive access that accomplishes this objective?

A. public B. private

C. protected D. transient

Answer & Explanation

Answer: Option C

Explanation:

Access modifiers dictate which classes, not which instances, may access features.

Methods and variables are collectively known as members. Method and variable members are
given access control in exactly the same way.

private makes a member accessible only from within its own class

protected makes a member accessible only to classes in the same package or subclass of


the class

default access is very similar to protected (make sure you spot the difference) default
access makes a member accessible only to classes in the same package.

public means that all other classes regardless of the package that they belong to, can access
the member (assuming the class itself is visible)

final makes it impossible to extend a class, when applied to a method it prevents a method


from being overridden in a subclass, when applied to a variable it makes it impossible to
reinitialise a variable once it has been initialised

abstract declares a method that has not been implemented.

transient indicates that a variable is not part of the persistent state of an object.

volatile indicates that a thread must reconcile its working copy of the field with the master
copy every time it accesses the variable.
After examining the above it should be obvious that the access modifier that provides the most
restrictions for methods to be accessed from the subclasses of the class from another package
is C - protected. A is also a contender but C is more restrictive, B would be the answer if the
constraint was the "same package" instead of "any package" in other words the subclasses
clause in the question eliminates default.

View Answer Workspace Report Discuss in Forum

2. 
public class Outer
{
public void someOuterMethod()
{
//Line 5
}
public class Inner { }

public static void main(String[] argv)


{
Outer ot = new Outer();
//Line 10
}
}

Which of the following code fragments inserted, will allow to compile?

A. new Inner(); //At line 5

B. new Inner(); //At line 10

C. new ot.Inner(); //At line 10

D. new Outer.Inner(); //At line 10

Answer & Explanation

Answer: Option A

Explanation:

Option A compiles without problem.

Option B gives error - non-static variable cannot be referenced from a static context.

Option C package ot does not exist.

Option D gives error - non-static variable cannot be referenced from a static context.

View Answer Workspace Report Discuss in Forum

3. 
interface Base
{
boolean m1 ();
byte m2(short s);
}

which two code fragments will compile?

1. interface Base2 implements Base {}


2. abstract class Class2 extends Base 
{ public boolean m1(){ return true; }}
3. abstract class Class2 implements Base {}
4. abstract class Class2 implements Base 
{ public boolean m1(){ return (7 > 4); }}
5. abstract class Class2 implements Base 
{ protected boolean m1(){ return (5 > 7) }}

A. 1 and 2 B. 2 and 3

C. 3 and 4 D. 1 and 5

Answer & Explanation

Answer: Option C

Explanation:

(3) is correct because an abstract class doesn't have to implement any or all of its interface's
methods. (4) is correct because the method is correctly implemented ((7 > 4) is a boolean).

(1) is incorrect because interfaces don't implement anything. (2) is incorrect because classes
don't extend interfaces. (5) is incorrect because interface methods are implicitly public, so
the methods being implemented must be public.

View Answer Workspace Report Discuss in Forum

4.  Which three form part of correct array declarations?

1. public int a [ ]
2. static int [ ] a
3. public [ ] int a
4. private int a [3]
5. private int [3] a [ ]
6. public final int [ ] a

A. 1, 3, 4 B. 2, 4, 5

C. 1, 2, 6 D. 2, 5, 6

Answer & Explanation

Answer: Option C
Explanation:

(1), (2) and (6) are valid array declarations.

Option (3) is not a correct array declaration. The compiler complains with: illegal start of type.
The brackets are in the wrong place. The following would work:public int[ ] a

Option (4) is not a correct array declaration. The compiler complains with: ']' expected. A
closing bracket is expected in place of the 3. The following works:private int a []

Option (5) is not a correct array declaration. The compiler complains with 2 errors:

']' expected. A closing bracket is expected in place of the 3 and

<identifier> expected A variable name is expected after a[ ] .

View Answer Workspace Report Discuss in Forum

5. 
public class Test { }

What is the prototype of the default constructor?

A. Test( ) B. Test(void)

C. public Test( ) D. public Test(void)

Answer & Explanation

Answer: Option C

Explanation:

Option A and B are wrong because they use the default access modifier and the access
modifier for the class is public (remember, the default constructor has the same access
modifier as the class).

Option D is wrong. The void makes the compiler think that this is a method specification - in
fact if it were a method specification the compiler would spit it out.

6.  What is the most restrictive access modifier that will allow members of one class to have
access to members of another class in the same package?

A. public B. abstract

C. protected D. synchronized

E. default access

Answer & Explanation


Answer: Option E

Explanation:

default access is the "package oriented" access modifier.

Option A and C are wrong because public and protected are less restrictive. Option B and


D are wrong because abstract and synchronized are not access modifiers.

View Answer Workspace Report Discuss in Forum

7.  Which of the following is/are legal method declarations?

1. protected abstract void m1();


2. static final void m1(){}
3. synchronized public final void m1() {}
4. private native void m1();

A. 1 and 3

B. 2 and 4

C. 1 only

D. All of them are legal declarations.

Answer & Explanation

Answer: Option D

Explanation:

All the given statements are legal declarations.

View Answer Workspace Report Discuss in Forum

8.  Which cause a compiler error?

A. int[ ] scores = {3, 5, 7};

B. int [ ][ ] scores = {2,7,6}, {9,3,45};

C. String cats[ ] = {"Fluffy", "Spot", "Zeus"};

D. boolean results[ ] = new boolean [] {true, false, true};

E. Integer results[ ] = {new Integer(3), new Integer(5), new Integer(8)};

Answer & Explanation


Answer: Option B

Explanation:

Option B generates a compiler error: <identifier> expected. The compiler thinks you are trying
to create two arrays because there are two array initialisers to the right of the equals, whereas
your intention was to create one 3 x 3 two-dimensional array.

To correct the problem and make option B compile you need to add an extra pair of curly
brackets:

int [ ] [ ] scores = { {2,7,6}, {9,3,45} };

View Answer Workspace Report Discuss in Forum

9.  Which three are valid method signatures in an interface?

1. private int getArea();


2. public float getVol(float x);
3. public void main(String [] args);
4. public static void main(String [] args);
5. boolean setFlag(Boolean [] test);

A. 1 and 2 B. 2, 3 and 5

C. 3, 4, and 5 D. 2 and 4

Answer & Explanation

Answer: Option B

Explanation:

(2), (3), and (5). These are all valid interface method signatures.

(1), is incorrect because an interface method must be public; if it is not explicitly


declared public it will be made public implicitly. (4) is incorrect because interface methods
cannot be static.

View Answer Workspace Report Discuss in Forum

10.  You want a class to have access to members of another class in the same package. Which is
the most restrictive access that accomplishes this objective?

A. public B. private

C. protected D. default access

Answer & Explanation


Answer: Option D

Explanation:

The only two real contenders are C and D. Protected access Option C makes a member
accessible only to classes in the same package or subclass of the class. While default access
Option D makes a member accessible only to classes in the same package.

11.  What is the widest valid returnType for methodA in line 3?

public class ReturnIt


{
returnType methodA(byte x, double y) /* Line 3 */
{
return (long)x / y * 2;
}
}

A. int B. byte

C. long D. double

Answer & Explanation

Answer: Option D

Explanation:

However A, B and C are all wrong. Each of these would result in a narrowing conversion.
Whereas we want a widening conversion, therefore the only correct answer is D. Don't be put
off by the long cast, this applies only to the variable x and not the rest of the expression. It is
the variable y (of type double) that forces the widening conversion to double.

Java's widening conversions are:

- From a byte to a short, an int, a long, a float, or a double.

- From a short, an int, a long, a float, or a double.

- From a char to an int, a long, a float, or a double.

- From an int to a long, a float, or a double.

- From a long to a float, or a double.

- From a float to a double.

View Answer Workspace Report Discuss in Forum


12. 
class A
{
protected int method1(int a, int b)
{
return 0;
}
}

Which is valid in a class that extends class A?

A. public int method1(int a, int b) {return 0; }

B. private int method1(int a, int b) { return 0; }

C. public short method1(int a, int b) { return 0; }

D. static protected int method1(int a, int b) { return 0; }

Answer & Explanation

Answer: Option A

Explanation:

Option A is correct - because the class that extends A is just simply overridingmethod1.

Option B is wrong - because it can't override as there are less access privileges in the
subclass method1.

Option C is wrong - because to override it, the return type needs to be an integer. The
different return type means that the method is not overriding but the same argument list
means that the method is not overloading. Conflict - compile time error.

Option D is wrong - because you can't override a method and make it a class method i.e.
using static.

View Answer Workspace Report Discuss in Forum

13.  Which one creates an instance of an array?

A. int[ ] ia = new int[15];

B. float fa = new float[20];

C. char[ ] ca = "Some String";

D. int ia[ ] [ ] = { 4, 5, 6 }, { 1,2,3 };

Answer & Explanation

Answer: Option A

Explanation:
Option A is correct. It uses correct array declaration and correct array construction.

Option B is incorrect. It generates a compiler error: incompatible types because the array
variable declaration is not correct. The array construction expects a reference type, but it is
supplied with a primitive type in the declaration.

Option C is incorrect. It generates a compiler error: incompatible types because a string literal
is not assignable to a character type variable.

Option D is wrong, it generates a compiler error <identifier> expected. The compiler thinks
that you are trying to create two arrays because there are two array initialisers to the right of
the equals, whereas your intention was to create a 3 x 3 two-dimensional array.

View Answer Workspace Report Discuss in Forum

14.  Which two of the following are legal declarations for nonnested classes and interfaces?

1. final abstract class Test {}


2. public static interface Test {}
3. final public class Test {}
4. protected abstract class Test {}
5. protected interface Test {}
6. abstract public class Test {}

A. 1 and 4 B. 2 and 5

C. 3 and 6 D. 4 and 6

Answer & Explanation

Answer: Option C

Explanation:

(3), (6). Both are legal class declarations.

(1) is wrong because a class cannot be abstract and final—there would be no way to use


such a class. (2) is wrong because interfaces and classes cannot be marked as static. (4)
and (5) are wrong because classes and interfaces cannot be marked as protected.

View Answer Workspace Report Discuss in Forum

15.  Which of the following class level (nonlocal) variable declarations will not compile?

A. protected int a;

B. transient int b = 3;

C. private synchronized int e;


D. volatile int d;

Answer & Explanation

Answer: Option C

Explanation:

Option C will not compile; the synchronized modifier applies only to methods.

Option A and B will compile because protected and transient are legal variable modifiers.


Option D will compile because volatile is a proper variable modifier.

16.  Which two cause a compiler error?

1. float[ ] f = new float(3);


2. float f2[ ] = new float[ ];
3. float[ ]f1 = new float[3];
4. float f3[ ] = new float[3];
5. float f5[ ] = {1.0f, 2.0f, 2.0f};

A. 2, 4 B. 3, 5

C. 4, 5 D. 1, 2

Answer & Explanation

Answer: Option D

Explanation:

(1) causes two compiler errors ( '[' expected and illegal start of expression) because the wrong
type of bracket is used, ( ) instead of [ ]. The following is the correct syntax: float[ ] f
= new float[3];

(2) causes a compiler error ( '{' expected ) because the array constructor does not specify the
number of elements in the array. The following is the correct syntax:float f2[ ] = new
float[3];

(3), (4), and (5) compile without error.

View Answer Workspace Report Discuss in Forum

17.  Given a method in a protected class, what access modifier do you use to restrict access to that
method to only the other members of the same class?

A. final B. static

C. private D. protected
E. volatile

Answer & Explanation

Answer: Option C

Explanation:

The private access modifier limits access to members of the same class.

Option A, B, D, and E are wrong because protected are the wrong access modifiers,


and final, static, and volatile are modifiers but not access modifiers.

View Answer Workspace Report Discuss in Forum

18.  Which is a valid declaration within an interface?

A. public static short stop = 23;

B. protected short stop = 23;

C. transient short stop = 23;

D. final void madness(short stop);

Answer & Explanation

Answer: Option A

Explanation:

(A) is valid interface declarations.

(B) and (C) are incorrect because interface variables cannot be


either protected ortransient. (D) is incorrect because interface methods cannot
be final or static.

1. 
public void foo( boolean a, boolean b)
{
if( a )
{
System.out.println("A"); /* Line 5 */
}
else if(a && b) /* Line 7 */
{
System.out.println( "A && B");
}
else /* Line 11 */
{
if ( !b )
{
System.out.println( "notB") ;
}
else
{
System.out.println( "ELSE" ) ;
}
}
}

A. If a is true and b is true then the output is "A && B"

B. If a is true and b is false then the output is "notB"

C. If a is false and b is true then the output is "ELSE"

D. If a is false and b is false then the output is "ELSE"

Answer & Explanation

Answer: Option C

Explanation:

Option C is correct. The output is "ELSE". Only when a is false do the output lines after 11 get
some chance of executing.

Option A is wrong. The output is "A". When a is true, irrespective of the value of b, only the
line 5 output will be executed. The condition at line 7 will never be evaluated (when a is true it
will always be trapped by the line 12 condition) therefore the output will never be "A && B".

Option B is wrong. The output is "A". When a is true, irrespective of the value of b, only the
line 5 output will be executed.

Option D is wrong. The output is "notB".

View Answer Workspace Report Discuss in Forum

2. 
switch(x)
{
default:
System.out.println("Hello");
}

Which two are acceptable types for x?

1. byte
2. long
3. char
4. float
5. Short
6. Long
A. 1 and 3 B. 2 and 4

C. 3 and 5 D. 4 and 6

Answer & Explanation

Answer: Option A

Explanation:

Switch statements are based on integer expressions and since both bytes and chars can
implicitly be widened to an integer, these can also be used. Also shorts can be
used. Short and Long are wrapper classes and reference types can not be used as variables.

View Answer Workspace Report Discuss in Forum

3. 
public void test(int x)
{
int odd = 1;
if(odd) /* Line 4 */
{
System.out.println("odd");
}
else
{
System.out.println("even");
}
}

Which statement is true?

A. Compilation fails.

B. "odd" will always be output.

C. "even" will always be output.

D. "odd" will be output for odd values of x, and "even" for even values.

Answer & Explanation

Answer: Option A

Explanation:

The compiler will complain because of incompatible types (line 4), the if expects a boolean but
it gets an integer.

View Answer Workspace Report Discuss in Forum

4. 
public class While
{
public void loop()
{
int x= 0;
while ( 1 ) /* Line 6 */
{
System.out.print("x plus one is " + (x + 1)); /* Line 8 */
}
}
}

Which statement is true?

A. There is a syntax error on line 1.

B. There are syntax errors on lines 1 and 6.

C. There are syntax errors on lines 1, 6, and 8.

D. There is a syntax error on line 6.

Answer & Explanation

Answer: Option D

Explanation:

Using the integer 1 in the while statement, or any other looping or conditional construct for
that matter, will result in a compiler error. This is old C Program syntax, not valid Java.

A, B and C are incorrect because line 1 is valid (Java is case sensitive so While is a valid class
name). Line 8 is also valid because an equation may be placed in a String operation as shown.

You might also like