ad_qqread_mid_big"> 下面介绍对象的初始化顺序问题。
示例3:
在main()方法中实例化了一个two类的对象。但程序在初始化two类的对象时,并非先调用two类的构造方法,而是先初始化two类的成员变量。这里two类有3个成员变量,它们都是one类的对象,所以要先调用3次one类的相应的构造方法。最后在初始化two类的对象。
示例4:
如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。
示例5:
程序中主类的静态变量会在main()方法执行前初始化。结果中只输出了一次one-3,这也说明:如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。
示例6:
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
综上所述:
在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方法创建对象。构造方法作用就是初始化。
静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初始化了,但非静态对象在每次调用时都要初始化。
程序中的主类的静态变量会在main()方法执行前进行初始化工作。
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
初始化的顺序包括构造方法调用的顺序如下:
1.主类的静态成员首先初始化。
2.主类的超类的构造方法按照从最高到最低的顺序被调用。
3.主类的非静态对象(变量)初始化。
4.调用主类的构造方法。
在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。 >>>更多专题请看java的类专题
示例3:
| class one { one(string str) { system.out.println(str); } } class two { one one_1 = new one("one-1"); one one_2 = new one("one-2"); one one_3 = new one("one-3"); two(string str) { system.out.println(str); } } public class test { public static void main(string[] args) { system.out.println("test main() start..."); two two = new two("two"); } } 输出结果: test main() start... one-1 one-2 one-3 two |
在main()方法中实例化了一个two类的对象。但程序在初始化two类的对象时,并非先调用two类的构造方法,而是先初始化two类的成员变量。这里two类有3个成员变量,它们都是one类的对象,所以要先调用3次one类的相应的构造方法。最后在初始化two类的对象。
示例4:
| class one { one(string str) { system.out.println(str); } } class two { one one_1 = new one("one-1"); one one_2 = new one("one-2"); static one one_3 = new one("one-3"); two(string str) { system.out.println(str); } } public class test { public static void main(string[] args) { system.out.println("test main() start..."); two two_1 = new two("two-1"); system.out.println("------------"); two two_2 = new two("two-2"); } } 输出结果: test main() start... one-3 one-1 one-2 two-1 ------------ one-1 one-2 two-2 |
如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。
示例5:
| class one { one(string str) { system.out.println(str); } } class two { one one_1 = new one("one-1"); one one_2 = new one("one-2"); static one one_3 = new one("one-3"); two(string str) { system.out.println(str); } 3 } public class test { static two two_3 = new two("two-3"); public static void main(string[] args) { system.out.println("test main() start..."); two two_1 = new two("two-1"); system.out.println("------------"); two two_2 = new two("two-2"); } } 输出结果: one-3 one-1 one-2 two-3 test main() start... one-1 one-2 two-1 ------------ one-1 one-2 two-2 |
程序中主类的静态变量会在main()方法执行前初始化。结果中只输出了一次one-3,这也说明:如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。
示例6:
| class one { one(string str) { system.out.println(str); } } class two { static int i = 0; one one_1 = new one("one-1"); static one one_2 = new one("one-2"); static one one_3 = new one("one-3"); two(string str) { system.out.println(str); } } public class test { public static void main(string[] args) { system.out.println("test main() start..."); system.out.println("two.i = " + two.i); } } 4 输出结果: test main() start... one-2 one-3 two.i = 0 |
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
综上所述:
在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方法创建对象。构造方法作用就是初始化。
静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初始化了,但非静态对象在每次调用时都要初始化。
程序中的主类的静态变量会在main()方法执行前进行初始化工作。
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
初始化的顺序包括构造方法调用的顺序如下:
1.主类的静态成员首先初始化。
2.主类的超类的构造方法按照从最高到最低的顺序被调用。
3.主类的非静态对象(变量)初始化。
4.调用主类的构造方法。
在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。
| 上一页 1 2 |
| 相关内容:java |
| 【收藏此页】【大 中 小】【打印】【关闭】 | |
| 上一篇:利用java技术开发web网络课件浅议 下一篇:java 中利用管道实现线程间的通讯 10万个软件免费高速下载 | |
| ||||||||||||||
|
|
-
关于我们
公司介绍 最新动态 联系我们 -
产品与服务
域名注册 jsp空间 php空间 -
常见问题
空间操作手册 网站备案相关 退款相关问题 -
技术支持
技术 QQ :178966803 联系电话:13616026886 联系邮箱:fjjsp@vip.163.com
扫描关注微信公众号
闽公网安备 35060202000074号