| IntraMethodPropagation.java |
package lectures.exceptions;
import util.annotations.WebDocuments;
/**
* CLASS CAST EXCEPTION AND INTRA METHOD PROPAGATION IN NESTED BLOCKS
*
* We see a new kind of exception {@link ClassCastException}. Hover over the name
* to see the full description,
*
* We see also an exception that occurs in a nested block that is caught in one
* case within the block and another case in an outer block,
*
* Study the four alternative loops and the exceptions caught. Debug-run the program
* in each of the four cases by placing the proper breakpoints and making the proper
* call uncommented in main.
*
*/
@WebDocuments({"Lectures/Exceptions.pptx", "Lectures/Exceptions.pdf", "Videos/Exceptions.avi"})
public class IntraMethodPropagation {
static final int NON_STRING_VALUE = 5;
static final String STRING_VALUE_1 = "hello";
static final String STRING_VALUE_2 = "goodbye";
static Object[] list = { NON_STRING_VALUE, STRING_VALUE_1, STRING_VALUE_2 };
public static void tryInsideBlock() {
for (int i = 0; i < list.length; i++) {
try {
/*
* Set breakpoint here and press F6 to see where you go next
*/
System.out.println((String) list[i]);
} catch (ClassCastException e) {
System.out.println(e);
}
}
}
public static void tryOutsideBlock() {
try {
for (int i = 0; i < list.length; i++) {
/*
* Set breakpoint here and press F6 to see where you go next
*/
System.out.println((String) list[i]);
}
} catch (ClassCastException e) {
System.out.println(e);
}
}
public static void tryInsideAndOutsideBlock() {
try {
for (int i = 0; i < list.length; i++) {
try {
/*
* Set breakpoint here and press F6 to see where you go next
*/
System.out.println((String) list[i]);
} catch (ClassCastException e) {
System.out.println(e);
}
}
} catch (ClassCastException e) {
System.out.println(e);
}
}
public static void tryInNoBlock() {
for (int i = 0; i < list.length; i++) {
/*
* Set breakpoint here and press F6 to see where you go next
*/
System.out.println((String) list[i]);
}
}
public static void main (String[] args) {
tryInsideBlock();
// tryOutsideBlock();
// tryInsideAndOutsideBlock();
// tryInNoBlock();
}
}
/**
* If an exception is thrown in method m by a statement s enclosed in two or more try blocks in m,
* then it is caught by:
* (a) the innermost compatible catch block.
* (b) the outermost compatible catch block.
* (c) all compatible catch blocks associated with enclosing try blocks.
* (d) a compatible catch block in the caller of m.
*
* After a catch block finishes execution, control flows to:
* (a) the statement following the corresponding try-catch-finally blocks.
* (b) the caller of the method in which the catch block executes.
* (c) none of the above
*
*
*
*/