服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java技术专题综述之构造方法篇

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控件访问数据库

扫描关注微信公众号