What is the best and cleanest way to do this? Specifically, I need some code in a static initializer block to run in that class, but I'd like to make this as clean-looking as possible.
There are two ways to initialize a class object: Using a parenthesized expression list. The compiler calls the constructor of the class using this list as the constructor's argument list. Using a single initialization value and the = operator.
The only way you can make an object is to construct it - so you can never initialize a class without a constructor.
How to make a public class not to be initialised by other classes **Making class as private. *Converting class to an interface. *Creating private constructor for the class. *Converting class to an abstract class.
Init method is a predefined method to initialize an object after its creation. Init method is a life cycle method for servlets for java. It is started by the browser when java program is loaded and run by the browser. Init method is a predefine method to initialize an object after its creation.
Loading != Initialization.
You want your class to be initialized (this is when static blocks executed, among other things).
An excerpt from the Java Language Specification says:
A class or interface type T will be initialized immediately before the first occurrence of >any one of the following:
- T is a class and an instance of T is created.
- T is a class and a static method declared by T is invoked.
- A static field declared by T is assigned.
- A static field declared by T is used and the field is not a constant variable (§4.12.4).
- T is a top-level class, and an assert statement (§14.10) lexically nested within T is executed.
Invocation of certain reflective methods in class Class and in package java.lang.reflect also causes class or interface initialization. A class or interface will not be initialized under any other circumstance.
Doh, anovstrup, already said it: Just make an empty static function called init
. Be sure to document that well... I personally can't see any use case for this in the context of well formed code though.
You can use the following code to force initialization of a class:
//... Foo.class ... //OLD CODE ... forceInit(Foo.class) ... //NEW CODE /** * Forces the initialization of the class pertaining to * the specified <tt>Class</tt> object. * This method does nothing if the class is already * initialized prior to invocation. * * @param klass the class for which to force initialization * @return <tt>klass</tt> */ public static <T> Class<T> forceInit(Class<T> klass) { try { Class.forName(klass.getName(), true, klass.getClassLoader()); } catch (ClassNotFoundException e) { throw new AssertionError(e); // Can't happen } return klass; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With