I'll give you a good reason... file access inevitably risks
IOExceptions, and exceptions don't propogate well from a static block.
That is to say, when the ClassLoader invokes the static block, it is
not invoked from within your code. The exception gets thrown and propogates
through the *ClassLoader* stack rather than your application code, resulting
in an application that simply won't start for mysterious reasons, forcing a
long and drawn out investigation.
The only reason I use static blocks any more is to initialize
constants that require more than 1 line to initialize correctly (such as
NumberFormats, where you may have additional methods to invoke once they are
corrected) or are order-dependent, so that if a field gets renamed and/or
the members are resorted the code doesn't blow up.
Even these examples are pretty scarce and serve very special purposes.
Best Practice: Don't do anything in a static block that can throw an
exception without good reason.
If you have something you'd like to initialize in a static way,
create a static synchronized accessor and allow the accessor to throw
exceptions as needed. i.e.
a singleton-like implementation:
private static Config configInstance = null;
public static final synchronized getConfig()
{
if(configInstance==null)
{
// create instance and read config;
// this can throw any RuntimeExceptions
// and still be compatible with the signature
}
return configInstance;
}
David Hibbs, ACS
Staff Programmer / Analyst
American National Insurance Company
> Id be wary about using static blocks for anything involving
> file access. I
> cant give you a good reason for that, but it just seems like
> a bad idea to
> me.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]