下面介绍对象的初始化顺序问题。  示例3:class one{one(string str){system.out.println(str);}}cl">
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java技术专题综述之构造方法篇     
  文章作者:未知  文章来源:水木森林  
  查看:302次  录入:管理员--2007-11-16  
  ad_qqread_mid_big">   下面介绍对象的初始化顺序问题。

  示例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.调用主类的构造方法。

  在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。
>>>更多专题请看java的类专题
上一页 1 2 
相关内容:java  
【收藏此页】【大 中 小】【打印】【关闭】
上一篇:利用java技术开发web网络课件浅议
下一篇:java 中利用管道实现线程间的通讯


10万个软件免费高速下载
教育教学 安全相关 游戏娱乐 源码下载 编程开发 数码软件 其它类别
网络软件 联络聊天 系统工具 媒体工具 图形图像 应用软件 行业软件
·java技术在嵌入式系统中的应用
·细述java技术开发规则--基本篇
·细述java技术开发规则--开发篇
·细述java技术开发规则--中级篇
·java技术与xml常见问题之一般问题
·新一代java技术即将出现
·java技术未来十年发展
·java技术与xml常见问题之jaxb
·java技术的新方向
·java技术与xml常见问题
 
·接口和抽象类的定义方式举例说明
·用maven制作java项目发行包
·java 基础入门 pom.xml 元素描述
·用jbuilder2007开发扩展jsf标签的插
·抽象类对象类和对象包装类
·使用java实现在文件中添加字符串
·instanceof和回调概念
·java变量的赋值与传递
·java se6调用java编译器的两种新方法
·weblogic运用db的java控件访问数据库
 
 
上一篇: ejb 技术的数据库应用    下一篇: 什么是servlet以及servlet的优越性
  相关文档
java的字串运算符+ 11-17
敏捷开发的必要技巧:将注释转为代码 11-17
java 的 http 文件队列下载 11-17
jbuilderx 常见问题faq 11-17
jbuilderx使用ant读书笔记 11-17
java技巧:列表排序 11-16
java技巧:用java保存位图文件 11-17
猜数字游戏,我的第一个j2me程序,很多问题,有待于解决 11-17
regexp 对象 11-16
实用教程:使用hibernate处理数据 11-17
java中的两个类:desktop和systemtray 11-16
web中基于xmlhttp的简单实例分析(图) 11-17
ibm 易捷产品免费讲座 (张江) 11-17
有效地对软件进行交互式诊断的技术和工具 11-17
j2se综合--浅谈 string 类的相关应用 01-28
struts+hibernate开发(源代码) 11-17
为java程序中添加播放midi音乐功能 11-17
有关motorola j2me开发的几个细节问题 11-16
精通hibernate之映射继承关系四(图) 11-17
scjp认证套题解析(2) 11-17
返回首页 | 关于我们 | J网章程 | JSP空间 | 免责声明 | 常见问题 | JSP空间操作手册

@2005-2012福建JSP技术网 版权所有 闽ICP备09012882号
技术电话:13616026886 谢宁松
邮箱:fjjsp @ vip.163.com 站长QQ,点击这里给我发消息