阅前声明: http://blog.csdn.net/heimaoxiaozi/archive/2007/01/19/1487884.aspx
/****************** Exercise 18 *****************
* Create a class with a String that is
* initialized using "instance initialization."
* Describe a use for this feature (other than
* the one specified in this book).
***********************************************/
public class E18_StringInstanceInitialization {
String s;
{
s = "'instance initialization'";
}
public E18_StringInstanceInitialization() {
System.out.println(
"Default constructor; s = " + s);
}
public E18_StringInstanceInitialization(int i) {
System.out.println(
"int constructor; s = " + s);
}
public static void main(String args[]) {
new E18_StringInstanceInitialization();
new E18_StringInstanceInitialization(1);
}
}
**The book states that the reason for instance initialization is to provide basic constructor activites for anonymous inner classes (which you haven’t learned about yet), because these cannot have constructor methods (constructors require names, and an anonymous inner class is anonymous – it has no name).
**The reason that you might use instance initialization in an ordinary class is to perform common activities before any constructor is called, especially those that are too complex to perform during initialization at the point of definition (an expression involving a for loop, for example, or one that involves opening and reading a file). Note that in the above example there are two constructors, and when you run the program you’ll see that instance initialization occurs before either constructor runs.