Difference between revisions of "Instantiation"
From Suhrid.net Wiki
Jump to navigationJump to searchLine 11: | Line 11: | ||
* Initialization of fields can be done through field declaration statements. | * Initialization of fields can be done through field declaration statements. | ||
+ | * Declaration of field must occur before its usage in any initializer if it is used on the RHS of an assignment. Example: | ||
+ | |||
+ | <syntaxhighlight lang="java5"> | ||
+ | |||
+ | public class Init4 { | ||
+ | |||
+ | int length = 10; | ||
+ | |||
+ | int area = length * width; //Illegal since width is a forward reference being used on the RHS. | ||
+ | |||
+ | int width = 20; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
== Initialization Blocks == | == Initialization Blocks == |
Revision as of 21:56, 16 August 2011
Constructors
- Every class - including Abstract classes - MUST have a constructor.
- Constructor chaining is built in. Every class constructor will call its default superclass constructor using super().
- Every constructor as its first statement has a call to this() or super().
- Compiler will only automatically insert call to no-arg super() or this().
- CANNOT call an instance method or access instance variables till the super constructor has run.
- Only Static variables can be accessed as a call to super() or this().
Field Initializers
- Initialization of fields can be done through field declaration statements.
- Declaration of field must occur before its usage in any initializer if it is used on the RHS of an assignment. Example:
public class Init4 {
int length = 10;
int area = length * width; //Illegal since width is a forward reference being used on the RHS.
int width = 20;
}
Initialization Blocks
- A static initialization block runs when the class is first loaded.(Runs only once)
- An instance init block runs every time a new instance is created.
- An instance init block runs right after the call to super() in a constructor (ie. after all the super-constructors have run).
- In case of multiple init blocks (either instance and static) they run in the order in which they are defined.