Tests Flashcards

1
Q

What will happen if you add the statement System.out.println(5 / 0); to a working
main() method?

  • *A.** It will not compile.
  • *B.** It will not run.
  • *C.** It will run and throw an ArithmeticException.
  • *D.** It will run and throw an IllegalArgumentException.
  • *E.** None of the above.
A

C. The compiler tests the operation for a valid type but not a valid result, so the code
will still compile and run. At runtime, evaluation of the parameter takes place before
passing it to the print() method, so an ArithmeticException object is raised.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is the output of the following application?

1: public class CompareValues {
2: public static void main(String[] args) {
3: int x = 0;
4: while(x++ 5: String message = x > 10 ? “Greater than” : false;
6: System.out.println(message+”,”+x);
7: }
8: }
* *A.** Greater than,10
* *B.** false,10
* *C.** Greater than,11
* *D.** false,11
* *E.** The code will not compile because of line 4.
* *F.** The code will not compile because of line 5.

A

F. In this example, the ternary operator has two expressions, one of them a String and the other a boolean value. The ternary operator is permitted to have expressions that don’t have matching types, but the key here is the assignment to the String reference.
The compiler knows how to assign the first expression value as a String, but the second boolean expression cannot be set as a String; therefore, this line will not compile.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What change would allow the following code snippet to compile? (Choose all that apply)

3: long x = 10;
4: int y = 2 * x;
* *A.** No change; it compiles as is.
* *B.** Cast x on line 4 to int.
* *C.** Change the data type of x on line 3 to short.
* *D.** Cast 2 * x on line 4 to int.
* *E.** Change the data type of y on line 4 to short.
* *F.** Change the data type of y on line 4 to long.

A

B, C, D, F. The code will not compile as is, so option A is not correct. The value 2 * x
is automatically promoted to long and cannot be automatically stored in y, which is
in an int value. Options B, C, and D solve this problem by reducing the long value to
int. Option E does not solve the problem and actually makes it worse by attempting
to place the value in a smaller data type. Option F solves the problem by increasing the
data type of the assignment so that long is allowed.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is the output of the following code?

3: byte a = 40, b = 50;
4: byte sum = (byte) a + b;
5: System.out.println(sum);
* *A.** 40
* *B.** 50
* *C.** 90
* *D.** The code will not compile because of line 4.
* *E.** An undefined value.

A

D. Line 4 generates a possible loss of precision compiler error. The cast operator has
the highest precedence, so it is evaluated first, casting a to a byte. Then, the addition is
evaluated, causing both a and b to be promoted to int values. The value 90 is an int
and cannot be assigned to the byte sum without an explicit cast, so the code does not
compile. The code could be corrected with parentheses around (a + b), in which case
option C would be the correct answer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

What is the result of the following code snippet?

3: int m = 9, n = 1, x = 0;
4: while(m > n) {
5: m–;
6: n += 2;
7: x += m + n;
8: }
9: System.out.println(x);
* *A.** 11
* *B.** 13
* *C.** 23
* *D.** 36
* *E.** 50
* *F.** The code will not compile because of line 7.

A

D. Prior to the first iteration, m = 9, n = 1, and x = 0. After the iteration of the first loop, m is updated to 8, n to 3, and x to the sum of the new values for m + n, 0 + 11 = 11. After the iteration of the second loop, m is updated to 7, n to 5, and x to the sum of the new values for m + n, 11 + 12 = 23. After the iteration of the third loop, m is updated to 6, n to 7, and x to the sum of the new values for m + n, 23 + 13 = 36. On the fourth iteration of the loop, m > n evaluates to false, as 6

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What is the output of the following code?

1: public class TernaryTester {
2: public static void main(String[] args) {
3: int x = 5;
4: System.out.println(x > 2 ? x 5: }}
* *A.** 5
* *B.** 4
* *C.** 10
* *D.** 8
* *E.** 7
* *F.** The code will not compile because of line 4.

A

D. As you learned in the section “Ternary Operator,” although parentheses are not
required, they do greatly increase code readability, such as the following equivalent
statement:
System.out.println((x > 2) ? ((x We apply the outside ternary operator fi rst, as it is possible the inner ternary expression
may never be evaluated. Since (x>2) is true, this reduces the problem to:
System.out.println((x Since x is greater than 2, the answer is 8, or option D in this case.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What data type (or types) will allow the following code snippet to compile? (Choose all that apply)
byte x = 5;
byte y = 10;
_____ z = x + y;
A. int
B. long
C. boolean
D. double
E. short
F. byte

A

A, B, D. The value x + y is automatically promoted to int, so int and data types that
can be promoted automatically from int will work. Options A, B, D are such data
types. Option C will not work because boolean is not a numeric data type. Options E
and F will not work without an explicit cast to a smaller data type.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

What is the output of the following code snippet?

3: int c = 7;
4: int result = 4;

5: result += ++c;
6: System.out.println(result);
* *A.** 8
* *B.** 11
* *C.** 12
* *D.** 15
* *E.** 16
* *F.** The code will not compile because of line 5.

A

C. The code compiles successfully, so option F is incorrect. On line 5, the pre-increment operator is used, so c is incremented to 4 and the new value is returned to the expression. The value of result is computed by adding 4 to the original value of 8, resulting in a new value of 12, which is output on line 6. Therefore, option C is the correct answer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What is the output of the following code snippet?

3: boolean x = true, z = true;
4: int y = 20;
5: x = (y != 10) ^ (z=false);
6: System.out.println(x+”, “+y+”, “+z);
* *A.** true, 10, true
* *B.** true, 20, false
* *C.** false, 20, true
* *D.** false, 20, false
* *E.** false, 20, true
* *F.** The code will not compile because of line 5.

A

B. This example is tricky because of the second assignment operator embedded in line
5. The expression (z=false) assigns the value false to z and returns false for the
entire expression. Since y does not equal 10, the left-hand side returns true; therefore,
the exclusive or (^) of the entire expression assigned to x is true. The output reflects
these assignments, with no change to y, so option B is the only correct answer. The
code compiles and runs without issue, so option F is not correct.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Which of the following exceptions are thrown by the JVM? (Choose all that apply)

  • *A.** ArrayIndexOutOfBoundsException
  • *B.** ExceptionInInitializerError
  • *C.** java.io.IOException
  • *D.** NullPointerException
  • *E.** NumberFormatException
A

A, B, D. java.io.IOException is thrown by many methods in the java.io package,
but it is always thrown programmatically. The same is true for NumberFormatException; it is thrown programmatically by the wrapper classes of java.lang. The other three exceptions are all thrown by the JVM when the corresponding problem arises.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Which exception will the following throw?

Object obj = new Integer(3);
String str = (String) obj;
System.out.println(str);
  • *A.** ArrayIndexOutOfBoundsException
  • *B.** ClassCastException
  • *C.** IllegalArgumentException
  • *D.** NumberFormatException
  • *E.** None of the above.
A

B. The second line tries to cast an Integer to a String. Since String does not extend
Integer, this is not allowed and a ClassCastException is thrown.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Which of the following Java operators can be used with boolean variables? (Choose all that apply)

  • *A.** ==
  • *B**. +
  • *C.** –
  • *D.**!
  • *E.** %
  • *F.**
A

A, D. Option A is the equality operator and can be used on numeric primitives, boolean values, and object references. Options B and C are both arithmetic operators and cannot be applied to a boolean value. Option D is the logical complement operator and is used exclusively with boolean values. Option E is the modulus operator, which can only be used with numeric primitives. Finally, option F is a relational operator that compares the values of two numbers.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What is the output of the following snippet, assuming a and b are both 0?

3: try {
4: return a / b;
5: } catch (RuntimeException e) {
6: return -1;
7: } catch (ArithmeticException e) {
8: return 0;
9: } finally {
10: System.out.print(“done”);
11: }

  • *A.** -1
  • *B.** 0
  • *C.** done-1
  • *D.** done0
  • *E.** The code does not compile.
  • *F.** An uncaught exception is thrown.
A

E. The order of catch blocks is important because they’re checked in the order they
appear after the try block. Because ArithmeticException is a child class of Runtime-
Exception, the catch block on line 7 is unreachable. (If an ArithmeticException is
thrown in try try block, it will be caught on line 5.) Line 7 generates a compiler error
because it is unreachable code.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What is printed besides the stack trace caused by the NullPointerException from line 16?

1: public class DoSomething {
2: public void go() {
3: System.out.print(“A”);
4: try {
5: stop();
6: } catch (ArithmeticException e) {
7: System.out.print(“B”);
8: } finally {
9: System.out.print(“C”);
10: }
11: System.out.print(“D”);
12: }
13: public void stop() {
14: System.out.print(“E”);
15: Object x = null;
16: x.toString();
17: System.out.print(“F”);
18: }
19: public static void main(String[] args) {
20: new DoSomething().go();
21: }
22: }

  • *A.** AE
  • *B.** AEBCD
  • *C.** AEC
  • *D**. AECD
  • *E.** No output appears other than the stack trace.
A

C. The main() method invokes go and A is printed on line 3. The stop method is
invoked and E is printed on line 14. Line 16 throws a NullPointerException, so stop
immediately ends and line 17 doesn’t execute. The exception isn’t caught in go, so the go method ends as well, but not before its finally block executes and C is printed on line 9. Because main() doesn’t catch the exception, the stack trace displays and no further output occurs, so AEC was the output printed before the stack trace.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

What is the output of the following code snippet?

3: do {
4: int y = 1;
5: System.out.print(y++ + “ “);
6: } while(y A. 1 2 3 4 5 6 7 8 9
* *B.** 1 2 3 4 5 6 7 8 9 10
* *C.** 1 2 3 4 5 6 7 8 9 10 11
* *D.** The code will not compile because of line 6.
* *E.** The code contains an infinite loop and does not terminate.

A

D. The variable y is declared within the body of the do-while statement, so it is out of scope on line 6. Line 6 generates a compiler error, so option D is the correct answer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

How many times will the following code print “Hello World”?

3: for(int i=0; i 4: i = i++;
5: System.out.println(“Hello World”);
6: }
* *A.** 9
* *B.** 10
* *C.** 11
* *D.** The code will not compile because of line 3.
* *E.** The code will not compile because of line 5.
* *F.** The code contains an infinite loop and does not terminate.

A

F. In this example, the update statement of the for loop is missing, which is fine as the
statement is optional, so option D is incorrect. The expression inside the loop increments
i but then assigns i the old value. Therefore, i ends the loop with the same value that it starts with: 0. The loop will repeat infinitely, outputting the same statement over and over again because i remains 0 after every iteration of the loop.

17
Q

What is the output of the following code snippet?

3: int x = 0;
4: String s = null;
5: if(x == s) System.out.println(“Success”);
6: else System.out.println(“Failure”);
* *A.** Success
* *B.** Failure
* *C.** The code will not compile because of line 4.
* *D.** The code will not compile because of line 5.

A

D. The variable x is an int and s is a reference to a String object. The two data types are incomparable because neither variable can be converted to the other variable’s type. The compiler error occurs on line 5 when the comparison is attempted, so the answer is option D.

18
Q

Which of the following statements are true? (Choose all that apply)

A. Runtime exceptions are the same thing as checked exceptions.

B. Runtime exceptions are the same thing as unchecked exceptions.

C. You can declare only checked exceptions.

D. You can declare only unchecked exceptions.

E. You can handle only Exception subclasses.

A

B. Runtime exceptions are also known as unchecked exceptions. They are allowed to be declared, but they don’t have to be. Checked exceptions must be handled or declared. Legally, you can handle java.lang.Error subclasses, but it’s not a good idea.

19
Q

What is the output of the following code snippet?

3: boolean keepGoing = true;
4: int result = 15, i = 10;
5: do {
6: i–;
7: if(i==8) keepGoing = false;
8: result -= 2;
9: } while(keepGoing);

10: System.out.println(result);
* *A.** 7
* *B.** 9
* *C.** 10
* *D.** 11
* *E.** 15
* *F.** The code will not compile because of line 8.

A

D. The code compiles without issue, so option F is incorrect. After the first execution of the loop, i is decremented to 9 and result to 13. Since i is not 8, keepGoing is false, and the loop continues. On the next iteration, i is decremented to 8 and result to 11. On the second execution, i does equal 8, so keepGoing is set to false. At the
conclusion of the loop, the loop terminates since keepGoing is no longer true. The value of result is 11, and the correct answer is option D.

20
Q

When are you required to use a finally block in a regular try statement (not a try-withresources)?

  • *A.** Never.
  • *B.** When the program code doesn’t terminate on its own.
  • *C.** When there are no catch blocks in a try statement.
  • *D.** When there is exactly one catch block in a try statement.
  • *E.** When there are two or more catch blocks in a try statement.
A

C. A try statement is required to have a catch clause and/or finally clause. If it goes
the catch route, it is allowed to have multiple catch clauses.

21
Q

What is the output of the following code snippet?

3: int x1 = 50, x2 = 75;
4: boolean b = x1 >= x2;
5: if(b = true) System.out.println(“Success”);
6: else System.out.println(“Failure”);
* *A.** Success
* *B.** Failure
* *C.** The code will not compile because of line 4.
* *D.** The code will not compile because of line 5.

A

A. The code compiles successfully, so options C and D are incorrect. The value of b after line 4 is false. However, the if-then statement on line 5 contains an assignment, not a comparison. The variable b is assigned true on line 3, and the assignment operator returns true, so line 5 executes and displays Success, so the answer is option A.

22
Q

What is the output of the following code snippet?

3: int count = 0;
4: ROW_LOOP: for(int row = 1; row 5: for(int col = 1; col 6: if(row * col % 2 == 0) continue ROW_LOOP;
7: count++;
8: }
9: System.out.println(count);
* *A.** 1
* *B.** 2
* *C.** 3
* *D.** 4
* *E.** 6
* *F.** The code will not compile because of line 6.

A

A. The expression on line 5 is true when row * col is an even number. On the first iteration, row = 1 and col = 1, so the expression on line 6 is false, the continue is skipped, and count is incremented to 1. On the second iteration, row = 1 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the third iteration, row = 2 and col = 1, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the fourth iteration, row = 3 and col = 1, so the expression on line 6 is false, the continue is
skipped, and count is incremented to 2. Finally, on the fifth and final iteration, row = 3 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 2. The result of 2 is displayed, so the answer is option B.

23
Q

What is the output of the following code snippet?

3: java.util.List list = new java.util.ArrayList();
4: list.add(10);
5: list.add(14);
6: for(int x : list) {
7: System.out.print(x + “, “);
8: break;
9: }
* *A.** 10, 14,
* *B.** 10, 14
* *C.** 10,
* *D.** The code will not compile because of line 7.
* *E.** The code will not compile because of line 8.
* *F.** The code contains an infinite loop and does not terminate.

A

C. This code does not contain any compilation errors or an infinite loop, so options D,
E, and F are incorrect. The break statement on line 8 causes the loop to execute once
and finish, so option C is the correct answer.

24
Q

What is the output of the following program?

1: public class Laptop {
2: public void start() {
3: try {
4: System.out.print(“Starting up “);
5: throw new Exception();
6: } catch (Exception e) {
7: System.out.print(“Problem “);
8: System.exit(0);
9: } finally {
10: System.out.print(“Shutting down “);
11: }
12: }
13: public static void main(String[] args) {
14: new Laptop().start();
15: } }

  • *A.** Starting up
  • *B.** Starting up Problem
  • *C.** Starting up Problem Shutting down
  • *D.** Starting up Shutting down
  • *E.** The code does not compile.
  • *F.** An uncaught exception is thrown.
A

B. The main() method invokes start on a new Laptop object. Line 4 prints Starting
up; then line 5 throws an Exception. Line 6 catches the exception, line 7 prints
Problem, and then line 8 calls System.exit, which terminates the JVM. The finally
block does not execute because the JVM is no longer running.

25
Q

What is the output of the following code snippet?

3: int x = 1, y = 15;
4: while x 5: y––;
6: x++;
7: System.out.println(x+”, “+y);
* *A.** 10, 5
* *B.** 10, 6
* *C.** 11, 5
* *D.** The code will not compile because of line 3.
* *E.** The code will not compile because of line 4.
* *F.** The code contains an infinite loop and does not terminate.

A

E. This is actually a much simpler problem than it appears to be. The while statement on line 4 is missing parentheses, so the code will not compile, and option E is the correct answer. If the parentheses were added, though, option F would be the correct answer since the loop does not use curly braces to include x++ and the boolean expression never changes. Finally, if curly braces were added around both expressions, the output would be 10, 6 and option B would be correct.

26
Q

What is the output of the following program?

1: public class Dog {
2: public String name;
3: public void parseName() {
4: System.out.print(“1”);
5: try {
6: System.out.print(“2”);
7: int x = Integer.parseInt(name);
8: System.out.print(“3”);
9: } catch (NumberFormatException e) {
10: System.out.print(“4”);
11: }
12: }
13: public static void main(String[] args) {
14: Dog leroy = new Dog();
15: leroy.name = “Leroy”;
16: leroy.parseName();
17: System.out.print(“5”);
18: } }

  • *A.** 12
  • *B.** 1234
  • *C.** 1235
  • *D.** 124
  • *E.** 1245
  • *F.** The code does not compile.
  • *G.** An uncaught exception is thrown.
A

E. The parseName method is invoked within main() on a new Dog object. Line 4 prints 1. The try block executes and 2 is printed. Line 7 throws a NumberFormatException, so line 8 doesn’t execute. The exception is caught on line 9, and line 10 prints 4. Because the exception is handled, execution resumes normally. parseName runs to completion, and line 17 executes, printing 5. That’s the end of the program, so the output is 1245.

27
Q

Which of the following pairs fill in the blanks to make this code compile? (Choose all that apply)

7: public void ohNo() _____ Exception {
8: _____________ Exception();
9: }

A. On line 7, fill in throw

B. On line 7, fill in throws

C. On line 8, fill in throw

D. On line 8, fill in throw new

E. On line 8, fill in throws

F. On line 8, fill in throws new

A

B, D. In a method declaration, the keyword throws is used. To actually throw an exception, the keyword throw is used and a new exception is created.

28
Q

What is the output of the following code snippet?

3: int x = 4;
4: long y = x * 4 - x++;
5: if(y 6: else System.out.println(“Just right”);
7: else System.out.println(“Too High”);
* *A.** Too Low
* *B.** Just Right
* *C.** Too High
* *D.** Compiles but throws a NullPointerException.
* *E.** The code will not compile because of line 6.
* *F.** The code will not compile because of line 7.

A

F. The code does not compile because two else statements cannot be chained together
without additional if-then statements, so the correct answer is option F. Option E is
incorrect as Line 6 by itself does not cause a problem, only when it is paired with Line
7. One way to fix this code so it compiles would be to add an if-then statement on
line 6. The other solution would be to remove line 7.

29
Q

What is the output of the following code?

1: public class ArithmeticSample {
2: public static void main(String[] args) {
3: int x = 5 * 4 % 3;
4: System.out.println(x);
5: }}
* *A.** 2
* *B.** 3
* *C.** 5
* *D.** 6
* *E.** The code will not compile because of line 3.

A

A. The * and % have the same operator precedence, so the expression is evaluated
from left-to-right. The result of 5 * 4 is 20, and 20 % 3 is 2 (20 divided by 3 is 18, the
remainder is 2). The output is 2 and option A is the correct answer.

30
Q

What is the result of the following code snippet?

3: final char a = ‘A’, d = ‘D’;
4: char grade = ‘B’;

5: switch(grade) {
6: case a:
7: case ‘B’: System.out.print(“great”);
8: case ‘C’: System.out.print(“good”); break;
9: case d:
10: case ‘F’: System.out.print(“not good”);
11: }
* *A.** great
* *B.** greatgood
* *C.** The code will not compile because of line 3.
* *D.** The code will not compile because of line 6.
* *E.** The code will not compile because of lines 6 and 9.

A

B. The code compiles and runs without issue, so options C, D, and E are not correct. The value of grade is ‘B’ and there is a matching case statement that will cause “great” to be printed. There is no break statement after the case, though, so the next case statement will be reached, and “good” will be printed. There is a break after this case statement, though, so the switch statement will end. The correct answer is thus option B.