Java代码执行顺序-样例

 
class  Insect
    
private int i = 9
    
int j; 
    Insect()

        System.out.println(
"i=" + i + ",j=" + j); 
        j
=37
    }
 
    
private static int x1 = print("static Insect.x1.initialized"); 
    
public static int print(String s)
        System.out.println(s);
        
return 47;
    }

}
 

class  Bettle  extends  Insect
    
private int k = print("Bettle.k initialized"); 
    
public Bettle(){
        System.out.println(
"k=" + k); 
        System.out.println(
"j=" + j); 
    }
 
    
private static int x2=print("static Insect.x2 initialized"); 
    
public static void main(String [] args) 
        System.out.println(
"Bettle constructor"); 
        Bettle b 
= new Bettle();
    }

}

运行结果:
static Insect.x1.initialized
static Insect.x2 initialized
Bettle constructor
i=9,j=0
Bettle.k initialized
k=47
j=37

解释:

Bettle运行需要先加载父类Insect,在加载Insect时先运行所有的Static代码,print()函数建立,但不运行.
这一句会运行:private static int x1 = print("static Insect.x1.initialized");
父类加载完成后加载子类Bettle,同样先初始化所有static代码,于是先运行:private static int x2=print("static Insect.x2 initialized");
然后进入main(),运行System.out.println("Bettle constructor");
再运行Bettle b=new Bettle();创建对象时先新建父类,此时先把所有变量设为初始值(i=9,j=0),然后触发父类constructor.
加载完父类再加载子类,同上先设定义值:private int k=print("Bettle.k initialized");然后运行构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值