Sie sind auf Seite 1von 4

Assertions Answers

Answers: Certified Java Programmer Mock Exam


No. Answer Remark
a Two command-line switches used to enable assertions in
1 -ea -enableassertions
e non-system classes are -ea and -enableassertions.
Two command-line switches used to disable assertions are
a
2 -da -disableassertions -da and -disableassertions. Remember that all of the letters
e
are lower case.
Two command-line switches used to disable assertions in
3 a -disableassertions non-system classes are -da and -disableassertions.
Remember that all of the letters are lower case.
Two command-line switches used to enable assertions in
c
4 -esa -enablesystemassertions system classes are -esa and -enablesystemassertions.
g
Remember that all of the letters are lower case.
By default assertions are disabled at run-time.
Assertions can be selectively enabled for any
a named class. Assertions can be selectively enabled
b for any named package. If assertions are
5 d selectively enabled for any named package then
e assertions are automatically enabled for the
f subpackages. Assertions can be selectively enable
for the unnamed package in the current working
directory.
An AssertionError is thrown to indicate that an assertion has
6 c AssertionError
failed. Don't be fooled by the name AssertionException.
If, under normal operating circumstances, the default label
With assertions enabled it prints 210210 followed
b of a switch statement should not be reached, then an assert
7 by an AssertionError message. With assertions
e statement can be placed after the default label to verify that
disabled it prints 210210-1
an unexpected condition has not not occurred.
An assert statement should not be used as demonstrated in
With assertions enabled it prints 012. With the program. The boolean expression of the do-loop depends
assertions disabled it attempts to print an infinite on the value of the local variable i1. The value of i1 is set
b
sequence of numbers. As a rule, the boolean within the boolean expression of the assert statement. If
8 e
expression of an assert statement should not be assertions are disabled, then the boolean expression of the
g
used to perform actions that are required for assert statement is not processed and the value of i1 is not
normal operation of the program. updated with each iteration of the loop; so the loop runs
indefinitely.
9 a Assertions should not be used to validate Assertions may be enabled or disabled at run time. Since
d arguments passed to public methods. Assertions assertions are not always enabled, they should not be used to
should not be used to perform processing that is validate the parameters of public methods. Parameter
required for the normal operation of the checking is typically published in the API specification of a
application. method and must be enforced even when assertions are not
enabled. Rather than use an assertion, an appropriate
runtime exception should be thrown such as
IllegalArgumentException, IndexOutOfBoundsException,
or NullPointerException. However, an assertion may be
used to validate the parameters of a nonpublic method. Since
assertions are not always enabled, an assertion should not be
used to perform operations that are required for the normal
operation of the program. For example, the boolean
expression of an assertion should not be used to produce the
side effect of incrementing a variable that controls a loop
statement. If assertions are disabled then the loop is unlikely
to function as intended. Section 14.20 of the Java Language
Specification defines "unreachable" statements. If an assert
statement is "unreachable" as defined by the JLS, then a
compile-time error is generated. In contrast, a programmer

page:1
Assertions Answers

Answers: Certified Java Programmer Mock Exam


No. Answer Remark
may believe that some points in the code will not be reached
as a result of design assumptions. For example, a
programmer may believe that the default case of a switch
statement will never be reached. An assertion can be placed
in the default case to verify the behavior of the switch
statement.
Section 14.20 of the Java Language Specification defines
"unreachable" statements. If an assert statement is
"unreachable" as defined by the JLS, then a compile-time
error is generated. In contrast, a programmer may believe
that some points in the code will not be reached as a result
of design assumptions. For example, a programmer may
believe that the default case of a switch statement will never
be reached. An assertion can be placed in the default case to
verify the behavior of the switch statement. While the
exception handling mechanisms of Java have been designed
to allow for recovery from Exceptions, the assertion
The compiler will generate an error if an assert mechanisms have been designed to discourage recovery
b statement is "unreachable" as defined by the Java attempts. An assertion is used to verify that the program has
10
c Language Specification. A catch clause should not not strayed beyond the bounds of expected behavior. For
be used to catch an AssertionError. example, suppose that you go to bed one night, and your pet
dog is sleeping on the floor next to your bed. Before going
to sleep, you make the assertion that your dog will still be
there in the morning. When you wake up, you find that a
different dog is sleeping in place of your pet. How do you
recover from the failure of your assertion? Since you
probably did not expect your dog to be mysteriously
replaced during the night, it is unlikely that you have already
developed an effective recovery routine. However, if you
had planned for a dog swapping exception, then the recovery
should be handled by the exception handling mechanism
rather than the assertion mechanism.
If the default label of a switch statement should not be
reached under normal operating circumstances, then the
With assertions enabled it prints ABC followed by default label might be a good location for an assert
an AssertionError message. With assertions statement. If a method is declared with a non-void return
a
disabled it prints ABC followed by an type and if no return statement appears after the switch
11 b
AssertionError message. In this code example an statement, then each case of the switch must have a return
d
assert statement could not be used in place of the statement or a throw statement. The throw statement is used
"throw" statement. rather than an assert, because the compiler knows that the
assert statement is not functional when assertions are
disabled.
If the default label of a switch statement should not be
With assertions enabled it prints ABC followed by
a reached under normal operating circumstances, then the
12 an AssertionError message. With assertions
d default label might be a good candidate for the use of an
disabled it prints ABCE
assert statement.
If the default label of a switch statement should not be
reached under normal operating circumstances, then the
default case becomes a good candidate for the use of an
assert statement. If a method is declared with a non-void
In this code example a throw statement must be
d return type and if no return statement appears after the
13 used in place of the assert statement. Compile-time
e switch statement, then each case of the switch must have a
error
return statement or a throw statement. The throw statement
is used rather than an assert, because the compiler knows
that the assert statement is not functional when assertions
are disabled.
14 a With assertions enabled it prints an AssertionError The assert statement indicates that the programmer believes

page:2
Assertions Answers

Answers: Certified Java Programmer Mock Exam


No. Answer Remark
message. With assertions disabled it prints
that b1 and b2 will never be true simultaneously, and the
d nothing. The assert statement is being used to
assert statement should not be reached under normal
f check a control-flow invariant to verify that the
operating conditions.
control flow never reaches a point in the program.
Assertions may be enabled or disabled at run time. Since
If assertions are enabled at run time it prints an assertions are not always enabled, they should not be used to
error message. With assertions disabled it prints validate the parameters of public methods. Parameter
a 1112. The assert statements are being used to checking is typically published in the API specification of a
d check a precondition--something that must be true method and must be enforced even when assertions are not
15
f when the method is invoked. Method m2 is an enabled. Rather than use an assertion, an appropriate
h example of an improper use of an assert statement: runtime exception should be thrown such as
an assert statement should not be used for argument IllegalArgumentException, IndexOutOfBoundsException,
checking in a public method. or NullPointerException. However, an assertion may be
used to validate the parameters of a nonpublic method.
If assertions are not enabled at run time it prints
b nothing. With assertions enabled it prints an error
16 c message. The assert statement is being used to Variable c equals 200 when the assertion is checked.
e check a postcondition--something that must be true
when the method completes successfully.
This question is an example of using assertions to check a
If assertions are not enabled at run time it prints
class invariant--something that must be true about each
b nothing. With assertions enabled it prints nothing.
instance of the class. Although a class invariant must be true
17 d The assert statement is being used to check a class
before and after the execution of each public method, the
e invariant--something that must be true about each
invariant is typically only checked at the end of each method
instance of the class.
and constructor.
Method m1 has a series of if/else statements. The first if
statement is processed if none of the booleans are true. The
With assertions enabled it prints an error message. second is processed if only b1 is true. The third is processed
With assertions disabled it prints: true,true,false if only b2 is true. A set of three booleans can exist is eight
The combination of the if/else statements and the states. The three if statements account for three of those
a
assert statement indicate that the programmer states; so five more states remain. The assert statement
d
18 expects no more than one boolean, b1, b2 or b3, to indicates that the programmer assumes that only one of
f
be true. The assert statement is being used to those five remaining states is valid--that is the state where
h
check an internal invariant--something that the only b3 is true. The combination of the three if statements
programmer assumes to be true at a particular point and the assert statement indicate that the programmer
in the program. believes that no more than one of the booleans will be true at
that point in the program. That assumption is called an
internal invariant.
19 a Prints "Only b1 is true" followed by an error Method m1 has a series of if/else statements. The first if
c message. The combination of the if/else statements statement is processed if none of the booleans are true. The
e and the assert statement indicate that the second is processed if only b1 is true. The third is processed
programmer expects no more than one boolean, b1, if only b2 is true. The fourth is processed if only b3 is true.
b2, or b3, to be true. The assert statement is being A set of three booleans can exist in one of eight states. The
used to check a control-flow invariant to verify that first four if statements account for four of those states; so
the control flow never reaches a point in the four more states remain. The combination of the three if
program. statements and the fact that an AssertionError is thrown
from the last else block indicates that the programmer
believes that no more than one of the booleans will be true
when method m1 is being processed. An assumption
concerning the state of a set of variables is called an internal
invariant. In this case, however, the assertion was tested by
verifying that control never reached a particular point in the
program. Based on the testing technique, we would say that
the assertion tests a control-flow invariant. A throw
statement is used in place of an assert statement, because the
throw statement can not be disabled. As a result, the method
is certain to generate an error once control passes beyond all

page:3
Assertions Answers

Answers: Certified Java Programmer Mock Exam


No. Answer Remark
of the return statements. The declared return type of method
m1 is String. No return statement appears after the sequence
of if statements; therefore, every if statement must either
return a String or throw an exception. Assertions can be
disabled at run time, so an assert statement in the final if
block is no guarantee that an exception will be thrown. For
that reason, an assert can not replace the throw statement.
A control-flow invariant is placed at a point in the program
that the programmer assumes will never be reached. Two
examples are the default case of a switch statement or the
else block of an if/else statement. It makes no sense to use
an assert statement to verify that the flow of control does
reach a particular point in the program, because it is unlikely
The flow of control does not reach a particular
b that an assertion error is helpful when the program is found
point in the program. The default case of a switch
20 e to be functioning correctly. An assert statement placed at the
statement is not reached. The else block of an
f beginning of a method is generally used to check a
if/else statement is not reached.
precondition. An assert statement that is placed at the end of
a method to check the state of some variables is generally
said to be checking a post condition. However, it is also
possible that an assert statement placed at the end of a
method might also be checking a control-flow invariant. The
correct term depends on the usage.

page:4

Das könnte Ihnen auch gefallen