<< Chapter < Page | Chapter >> Page > |
Discuss in fragments
This program is a little longer than the previous programs, so I will break it down and discuss it in fragments. A complete listing of the program is shownin Listing 10 .
The class definition shown in Listing 6 is used to construct a custom exception object that encapsulates a message. Note that thisclass extends Exception . (Therefore, it is a checked exception.)
Listing 6 . The class named MyException . |
---|
class MyException extends Exception{
MyException(String message){//constrsuper(message);
}//end constructor}//end MyException class |
The constructor for this class receives an incoming String message parameter and passes it to the constructor for the superclass. This makesthe message available for access by the getMessage method called in the catch block.
The try block
Listing 7 shows the beginning of the main method, including the entire try block
Listing 7 . The try block. |
---|
class Excep16{//controlling class
public static void main(String[] args){try{
for(int cnt = 0; cnt<5; cnt++){
//Throw a custom exception, and// pass message when cnt == 3
if(cnt == 3) thrownew MyException("3");
//Transfer control before// processing for cnt == 3
System.out.println("Processing data for cnt = "
+ cnt);}//end for-loop
}//end try block |
The main method executes a for loop (inside the try block) that guarantees that the variable named cnt will reach a value of 3 after a couple of iterations.
Once during each iteration, (until the value of cnt reaches 3) a print statement inside the for loop displays the value of cnt . This results in the output shown in Figure 11 .
Figure 11 . Output from the for loop. |
---|
Processing data for cnt = 0
Processing data for cnt = 1Processing data for cnt = 2 |
What happens when cnt equals 3?
However, when the value of cnt equals 3, the throw statement in Listing 7 is executed. This causes control to transfer immediately to the matching catch block following the try block (see Listing 8 ). During this iteration, the print statement following the throw statement is not executed. Therefore, the output never shows a value for cnt greater than 2, as shown in Figure 11 .
The catch block
Listing 8 shows a catch block whose type matches the type of exception thrown in Listing 7 .
Listing 8 . A matching catch block. |
---|
catch(MyException e){
System.out.println("In exception handler, "
+ "get the message\n"+ e.getMessage());
}//end catch block |
When the throw statement is executed in Listing 7 , control is transferred immediately to the catch block in Listing 8 . No further code is executed within the try block.
A reference to the object instantiated as the argument to the throw keyword in Listing 7 is passed as a parameter to the catch block. That reference is known locally by the name e inside the catch block.
Using the incoming parameter
The code in the catch block calls the method named getMessage (inherited from the Throwable class) on the incoming parameter and displays that message on the screen. This produces the output shown in Figure 12 .
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?