Java初始化生命周期
package com.init;
abstract class Glyph {
void draw() {
System.out.println("Glyph.draw()");
}
Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph after draw()");
}
}
class RoundGlyph extends Glyph {
private int radius = 1;
RoundGlyph(int r) {
System.out.println("RoundGlyph.RoundGlyph().radius = " + radius);
radius = r;
System.out.println("RoundGlyph.RoundGlyph().radius = " + radius);
}
void draw() {
System.out.println("RoundGlyph.draw(), radius = " + radius);
}
}
public class PolyConstructors {
public static void main(String[] args) {
new RoundGlyph(5);
}
}
输出:
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph after draw()
RoundGlyph.RoundGlyph().radius = 1
RoundGlyph.RoundGlyph().radius = 5
1 无继承情况下的Java初始化顺序:
package com.sharp.init;
class Glyph {
public int radius = 0;
void draw() {
System.out.println("Glyph.draw()");
}
Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph after draw()");
}
}
class RoundGlyph extends Glyph {
public int radius = 1;
RoundGlyph(int r) {
System.out.println("RoundGlyph.RoundGlyph().radius = " + radius);
radius = r;
System.out.println("RoundGlyph.RoundGlyph().radius = " + radius);
}
void draw() {
System.out.println("RoundGlyph.draw(), radius = " + radius);
}
}
public class PolyConstructors {
public static void main(String[] args) {
RoundGlyph r = new RoundGlyph(5);
System.out.println("-----------------------------");
System.out.println("RoundGlyph.now.radius=" + r.radius);
r.draw();
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
Glyph g = new RoundGlyph(5);
System.out.println("-----------------------------");
System.out.println("Glyph.now.radius=" + g.radius);
g.draw();
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
Glyph f = new Glyph();
System.out.println("-----------------------------");
System.out.println("Glyph.now.radius=" + f.radius);
f.draw();
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
}
}
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph after draw()
RoundGlyph.RoundGlyph().radius = 1
RoundGlyph.RoundGlyph().radius = 5
-----------------------------
RoundGlyph.now.radius=5
RoundGlyph.draw(), radius = 5
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph after draw()
RoundGlyph.RoundGlyph().radius = 1
RoundGlyph.RoundGlyph().radius = 5
-----------------------------
Glyph.now.radius=0
RoundGlyph.draw(), radius = 5
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Glyph() before draw()
Glyph.draw()
Glyph after draw()
-----------------------------
Glyph.now.radius=0
Glyph.draw()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^