Think about it: what is a try...catch block meant to do?
It catches exceptions, and diverts execution directly to the catch block code.
So if your code looks like this:
int a ;
try
{
a=4 ;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Then the system can "see" an execution path where a is not initialised: when a problem occurs in the assignment. It's not likely to happen in your example, but it very much could in a more complex case:
int a ;
try
{
a=GetValue();
}
catch (Exception ex)
{
...
}
If an exception occurs in GetValue, the value of a is never set.
Using finally is different: it doesn't catch an exception, so either the assignment will be executed or the code after the try...finally block will not (as the exception isn't handled, it it dealt with by a higher level method once the finally code is complete).
This is very much the same problem you had yesterday:
Why the variable x has to be initialized when using inputstreamreader class ?[
^]