1 Java initialization order without inheritance:
class Sample{Sample (String s) {System.out.println (s); Sample () {System.out.println ("the default constructor for the sample is invoked"); } }
classtest{
StaticSample sam=
NewSample ("Static member Sam initialization"); Sample sam1=
NewSample ("SAM1 member initialization");
Static{System.out.println ("Static Block Execution");
if(sam==
NULL) System.out.println ("Sam is null"); sam=
NewSample ("Initialize SAM member variable in static block"); Test () {System.out.println ("Test default constructor called"); }
}//Main function
PublicStaticvoidMain (String str[]) {
Test a=
NewTest ();
Static member Sam initialization-----Static member initialization static block execution-----Static block is executed in static block initialization SAM member variable----static block performs SAM1 member initialization-----Normal member initialization T Est default constructor is called-----constructor execution
It can be concluded that a static member variable is initialized first (note that static can be viewed as a static member, whose execution order is related to the order in which it is declared in the Class) B normal member Initializes c to execute the constructor.
For a static member (a static block can be considered as a normal one, it does not necessarily execute first when class is initialized) and ordinary members, whose initialization order is only relevant to the order in the class definition, regardless of other factors. For example, the following example:
classtest{
Static{System.out.println ("Static block 1 execution"); }
StaticSample staticsam1=
NewSample ("Static member staticSam1 initialization"); Sample sam1=
NewSample ("SAM1 member initialization");
StaticSample staticsam2=
NewSample ("Static member StaticSam2 initialization");
Static{System.out.println ("Static block 2 Execution"); Test () {System.out.println ("Test default constructor called"); } Sample sam2=
NewSample ("SAM2 member initialization");
}
The result is: Static Block 1 Performs a staticSam1 initialization of a static member StaticSam2 initialize the SAM1 static block 2 executes the--------statically member initialization sam2 Member initialization--------normal member test default constructor is called--------constructor
2 initialization order in the case of Java inheritance:
classtest{
Static{System. Out. println ("Parent class static block 1 execution"); }
StaticSample staticSam1 =
New Sample ("Static staticSam1 initialization of parent class"); Sample
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.
A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service