Tuesday, October 1, 2013

The try-catch-finally love affair!

Ok, everybody here already know about the affair, I am just discussing some more bits of this love triangle.
Lets dig hard to the shallow level :)

try{
    //try something
}
//and if the trial goes wrong, catch the issue and handle
catch(Exception e){
    //handling the problematic part
    //or at least letting the program to continue
    //and exit gracefully and not shut at face!
}
//but
finally{
    //do this, so you are the winner!!
}

So from even the baddest of our common-sense, we smell that finally block supercedes the two others, viz., try and catch. Lets prove a point in this.

class Dodo {

    public static void main(String...args) {
        int num = doSomething();
        System.out.println(num);
    }

    private static int doSomething() {
        try {
            return (1+2+3);
        }
        catch(Exception e) {
            return -1;
        }
        finally {
            return 0;
        }
    }
}

The output will always be 0.
So, basically, I can have a conversation as follows:

Asker: Dude, what you are gonna do with this finally?
Me: Ok dude, since this is the one that will be run no matter how my program logic screws up in the try block, I may write only that part which will not throw any problems like (1+2*3). But I will not. I will not involve my business logic in this love-triangle.
Asker: What then?
Me: I'd love to clear up things only.
Asker: I'm not clear!
Me: For example, if I am doing input-output operations, then I will close the connections in finally and nullify the references to help Mr. GC.
Asker: Ok
Me: Enjoy!


DO NOT TRY THIS AT HOME

public class TCFTest {
    static int i;
    public static void main(String[] args) {
        m1();
        System.out.println(i); //What will be the output? ^_^
    }
    static void m1(){
        //the value of static variable 'i' will be set
        try{
            i= 1;
            try{
                i= 4;
            }
            finally{
                i= 5;
            }
        }
        catch(Exception e){
            i= 2;
        }
        finally{
            i= 3;
            try{
                i= 6;
            }
            finally{
                i= 7;
            }
        }
    }//m1() end
}

No comments:

Post a Comment

Liked or hated the post? Leave your words of wisdom! Thank you :)