Win a copy of Rust Web Development this week in the Other Languages forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Tim Cooke
  • Campbell Ritchie
  • Ron McLeod
  • Liutauras Vilda
  • Jeanne Boyarsky
Sheriffs:
  • Junilu Lacar
  • Rob Spoor
  • Paul Clapham
Saloon Keepers:
  • Tim Holloway
  • Tim Moores
  • Jesse Silverman
  • Stephan van Hulst
  • Carey Brown
Bartenders:
  • Al Hobbs
  • Piet Souris
  • Frits Walraven

Local variable initialization-Its magic

 
Ranch Hand
Posts: 381
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Why this

fails the compilation?
And this

passes the compilation?
Please help!
[ November 06, 2006: Message edited by: Sanjeev Kumar Singh ]
 
Ranch Hand
Posts: 10198
3
Mac PPC Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Sanjeev,

It's a good question. In both the ways, the variable x's scope is within the try block, first case and within both the catch block and try block in the second case. I tried to change x = 17 in the catch block but it still prints 7....Any reasons???

Thanks in advance and thanks Sanjeev for bringing this question.
 
Ranch Hand
Posts: 72
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Ranchers,

When you try to compile the code, the compiler checks to see if any variables falls into the possibility of being an unreachable code.

Here though there is only one line in try block, but theoritically it falls in the category where this line may become unreachable (in case if some more line in the code exists above it ).



Thus compiler will report the error that x might not have been initialized.

Now when you initialize x in the catch block also than the compiler don't complain. B'cos now the compiler knows that in any case, even if some exception occurs, x will be initialized.



I hope this clears the doubt about compiler error.
Now coming to Jothi's doubt.
When you change the value of x in catch block, it matters only when some exception occurs and x is initialized through catch block. Under normal execution, x will always be initialized as 7 and value of Y will always be printed as 7.

To print value of x (ie value of y) as 17 try this code
 
Joe San
Ranch Hand
Posts: 10198
3
Mac PPC Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Above,

Why this compiler is playing such a game??? I understood it but still I'm wondering and refusing to imagine that when we say x = 17 in the catch block the compiler is happy but it takes the value from within the try scope...
 
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Sanjeev ,
I am very happy that you asked this magic Q.I got solution.Here is only one concept that is, for compiler checking .At Compile time Compiler will check that when Developer is using try catch block, So compiler knows that that this uses for exception handeling.So, Compiler thinks that if there may exception in try block at run time then it may throw exception because runtime checking will be done by JVM not by compiler. So compiler will also check it in catch block. If it is there then in both cases x will initialise means if exception caught or if there is no exception.

i think like that .
Thanks a lot To Sanjeev to point us on basic issue
Prashant Singh
 
Sanjeev Singh
Ranch Hand
Posts: 381
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi all,
What my understanding about the problem is as stated......
I think to understand this question it is neccessary to understand the actions which are going to happen in compile time and runtime activities.
COMPILE TIME ACTIVITIES
The compile will ensure the initializaion of the local variable at any cost.So when we initialze a non initialized local variable in a try block,though the try has a single statement,the compiler is feared about the non initializaion of the local varible as exception can occur at any statement which might be before or after the initializaion(but in reallity there is only one statement..compiler can not count the number of statement and its relative position w.r.t. other statement).After the re-initializaion of the variable in the catch block makes sures that even if there is any exception in the try block it will be initialized in the catch block....so initializaion will be done at any cost.

RUN TIME ACTIVITY
There is no exception in the try block to be catched by the catch block.so the the value of x will be initialized the the try block initializaion.The catch will never be executed.

Ranchers correct me if I am wrong.
 
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Sanjeev Kumar Singh:
Why this

fails the compilation?
And this

passes the compilation?
Please help!

[ November 06, 2006: Message edited by: Sanjeev Kumar Singh ]




if (for whatever reason) the try block fails how can y = x when x has not been initialize yet, it can't.
 
Joe San
Ranch Hand
Posts: 10198
3
Mac PPC Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hoorah to Rachers!! We got it.
 
Prashant kumar Singh
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Ranchers,
I am going to explain Sanjeev Q' solution :
1) I am taking first case where code is like below:

In this case, when we will try to compile it then compiler will check for local variable x, because local variables must be initialized. So compiler comes in try block where it will find x=7; but compiler does not know about run time activity.So, compiler will think that if try block may have any exceptional statement then try block will not execute,So control will jump to catch block.So compiler will check catch block for confirmation that if any exception will arise ,then variable x will be initialise. So in above case in catch block there is no initialisation of x.So it throws compile time error.
next case,If we take second case like..

In this case, we have initialized in both places as x=7.
So it full fill all compiler's requirements.So it compile.
Another confusion arises by some friends that he has initialized x=7 in try and x=19 in catch but it prints x=7.
Reason behind it is At compile time what i have disscused above will happen,But at run time jvm looks inside try first there is no exception so jvm will not enter in catch block so it will print x=7;

i think like that
thanks
Prashant Kumar Singh
[ November 06, 2006: Message edited by: Prashant kumar Singh ]
 
Ranch Hand
Posts: 1274
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi ranchers,

why are some of you are talking about scope always?

The question has nothing to do with scope.
Variable x is declared in the main method, so it is visible there. Also in all block inside.

The question is if x gets initialized in all bifurcations of the code. Wouldn't be necessary if x wasn't used, though.

So initializing it in a try block alone won't do, must be as well in the catch (or finally) block.
Same would be true for if/else.


Yours,
Bu.
 
Joe San
Ranch Hand
Posts: 10198
3
Mac PPC Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thans Bu.
 
WHAT is your favorite color? Blue, no yellow, ahhhhhhh! Tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
reply
    Bookmark Topic Watch Topic
  • New Topic