初始器的执行顺序讲解

初始器的执行顺序讲解

ID:8817674

大小:66.00 KB

页数:7页

时间:2018-04-08

初始器的执行顺序讲解_第1页
初始器的执行顺序讲解_第2页
初始器的执行顺序讲解_第3页
初始器的执行顺序讲解_第4页
初始器的执行顺序讲解_第5页
资源描述:

《初始器的执行顺序讲解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、初始器可以用来初始化对象和类中的变量,为这些变量赋初始值。初始器主要有下面几种。■表达式型字段初始器■代码块型静态初始器■代码块型实例初始器例题,运行下面的代码会得到什么结果?publicclassInitializationOrder{staticinti=5;staticintl;intj=7;intk;publicInitializationOrder(intm){System.out.println(i+","+j+","+k+","+l+","+m);}{j=70;l=20;}static{i=50;}publicstati

2、cvoidmain(String[]args){newInitializationOrder(l);}}运行结果:代码可以正确编译,运行时打印出50,70,0,20,01、表达式型变量初始器变量声明语句中利用表达式型初始器可以明确规定变量的初始化。实例代码如下:publicclassMyClass{inti=20;//(1)非静态初始化staticdoublej=20.05;//(2)静态初始化publicstaticvoidmain(String[]args){//...}}利用new运算符创建对象的时候,该对象的变量就会被初始化为

3、表达式中所定义的初始值,如上面的代码(1)处。类的初始化使得类的静态变量被赋予初始化值,例如上面的(2)处,这意味着,在初始化类的时候,静态变量j就会初始化。说明:静态变量的表达式型初始器不执行通过名字来引用非静态成员,关键词this和super也不能出现在表达式型静态初始器中。由于实例化之前总会进行类的初始化,表达式型实例初始器总可以引用类的任何静态成员,而不用考虑成员的声明次序。下面的示例代码是正确的。publicclassMyClass{inti=20*j;//(1)非静态初始化staticintj=20;//(2)静态初始化p

4、ublicstaticvoidmain(String[]args){//...}}注意:在Java语言中,变量的声明必须位于任何表达式型初始器运用该变量之前。参考下面的代码:publicclassMyClass{intlength=10;//(1)//doubleare=hi*length*width;//(2)编译错误,因为width应该声明在前doubleare=hi*length*this.width;//(3)编译正常,因为使用了this关键词,但是width值不是10,而是默认的初始值intwidth=10;//intsq=

5、height=20;//(5)合法的表达式(在对height赋值左侧作出前向引用)intheight;//(6)staticinthi=100;publicstaticvoidmain(String[]args){MyClassmy=newMyClass();//...}}上面代码中,(2)是不能通过编译的,因为该表达式型初始器中的变量width没有遵守Java的“读取之前先声明”的原则。变量hi是正确的,值是100,因为hi是类的静态变量,在类实例化之前就已经初始化了。(3)处事编译正常的,同(2)处的区别就是增加了this关键词。

6、值得注意的是,虽然(3)处可以正常编译,但是此时width的值并不是10,而是默认的初始值。(5)处的表达式是合法的,该表达式型初始器会计算为(sq=(height=20)),每个MyClass类初始化的时候height都会设置为20.1、代码块型静态初始器Java语言中可以在类中定义代码块的静态初始器。代码块静态初始器中的代码只会在初始化类的时候初始化一次。注意:代码块型静态初始器不属于任何方法。类可以有多个代码块型初始器,代码块型静态初始器并不是类的成员。关键词this和super不能出现在代码块型静态初始器中。示例代码如下:pu

7、blicclassMyClass{static{//(1)静态初始器sf1=10;//(2)//sf1=if1;//(3)if1没有声明//inta=2*sf1;//(4)sf1还没有声明intb=sf1=20;//(5)可以在赋值左侧作出前向引用intc=MyClass.sf1;//(6)}staticintsf1=sf2=30;//(7)staticintsf2;//(8)intif1=5;//(9)static{//(10)静态初始器intd=2*sf1;//(11)inte=sf1=50;//(12)}publicstatic

8、voidmain(String[]args){System.out.println(MyClass.sf1);System.out.println(MyClass.sf2);}}上面的代码中,(1)和(10)处就是代码块

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。