一、构造代码块和构造函数哪个先执行?
初始化顺序:静态成员变量-》静态代码块- 》普通成员变量-》普通代码块-》 构造函数 (如果基类有静态成员变量或者静态代码块,先执行父类的再执行子类的。见例2)
例1.
class Mug {
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
public class Mugs{
Mug mug1=new Mug(1);
static Mug mug2=new Mug(2);
static
{
System.out.println("static {} initialized");
}
{
System.out.println("{} initialized");
}
Mugs() {
System.out.println("Mugs()");
}
Mugs(int i) {
System.out.println("Mugs(int)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
}
}
输出结果:
Mug(2)
static {} initialized
Inside main()
Mug(1)
{} initialized
Mugs()
例2.
class test
{
public test() {
// TODO Auto-generated constructor stub
System.out.println("test");
}
}
class Mug {
static test t1=new test();
static
{
System.out.println("Mug static{}");
}
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
public class Mugs{
Mug mug1=new Mug(1);
static Mug mug2=new Mug(2);
static
{
System.out.println("static {} initialized");
}
{
System.out.println("{} initialized");
}
Mugs() {
System.out.println("Mugs()");
}
Mugs(int i) {
System.out.println("Mugs(int)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
}
}
输出结果:
test
Mug static{}
Mug(2)
static {} initialized
Inside main()
Mug(1)
{} initialized
Mugs()
class Mug {
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
public class Mugs{
Mug mug1=new Mug(1);
static Mug mug2=new Mug(2);
static
{
System.out.println("static {} initialized");
}
{
System.out.println("{} initialized");
}
Mugs() {
System.out.println("Mugs()");
}
Mugs(int i) {
System.out.println("Mugs(int)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
}
}
输出结果:
static {} initialized
Inside main()
Mug(1)
{} initialized
Mugs()
class test
{
public test() {
// TODO Auto-generated constructor stub
System.out.println("test");
}
}
class Mug {
static test t1=new test();
static
{
System.out.println("Mug static{}");
}
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
public class Mugs{
Mug mug1=new Mug(1);
static Mug mug2=new Mug(2);
static
{
System.out.println("static {} initialized");
}
{
System.out.println("{} initialized");
}
Mugs() {
System.out.println("Mugs()");
}
Mugs(int i) {
System.out.println("Mugs(int)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
}
}
输出结果:
Mug static{}
Mug(2)
static {} initialized
Inside main()
Mug(1)
{} initialized
Mugs()