A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马雨铎 黑马帝   /  2011-7-30 10:23  /  1959 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近看书 看到 构造器    但是一直搞不懂 构造器在程序中是何时运行的?
童鞋们 给讲解下 最好能来段代码讲解!  文字讲解书上也有 看着比较模糊
[ 本帖最后由 马雨铎 于 2011-07-30  10:53 编辑 ]

2 个回复

倒序浏览
黑马网友  发表于 2011-7-30 10:32:53
沙发
当创建一个类的对象的时候就会运行构造器了。

//ps: 晕,我都不敢回答这个问题。我怎么觉得这问题就不是问题,难道我真的错了?
请各位童鞋们赐教。
回复 使用道具 举报
黑马网友  发表于 2011-7-30 10:40:53
藤椅
1、构造器的最大的用处就是在创建对象时候执行初始化,我们应该知道,[color=Blue]创建一个对象时候,系统为这个对象的属性进行默认初始化,这种默认初始化把所以基本类型的属性设为0(对熟知型属性)或false(对布尔型属性),把所以的引用类型的属性设置为null[/color]
2、如果我们想改变这种默认初始化,想让[color=Blue]系统创建对象的时候就为该对象的各个属性显示的指定初始值,可以定义有参构造器[/color]
如下程序我们提供一个自定义的构造器:[code=java]package cn.itcast.heima
public class TestConstructor
{
        public String name;
        public int count;
        //提供自定义的构造器,该构造器包含两个参数
        public TestConstructor(String name , int count)
        {
                //构造器里的this代表它进行初始化的对象
                //下面两行代码将传入的2个参数赋给this代表对象的name和count属性
                this.name = name;
                this.count = count;
        }
        public static void main(String[] args)
        {
                //使用自定义的构造器来创建TestConstructor对象
                //系统将会对该对象执行自定义的初始化
                TestConstructor tc = new TestConstructor("黑马程序员训练营学员毕业就业薪水" , 20000);
                //输出TestConstructor对象的name和count属性
                System.out.println(tc.name);
                System.out.println(tc.count);
        }
}[/code]运行上面程序,[color=Red]输出对象的时候name属性不是null,而且count属性也不再是0[/color];这就是构造器的作用

注意:[color=Red]构造器是创建Java对象的重要途径,但是构造器不完全负责创建Java对象[/color]
     因为如上面程序中通过new TestConstructor("黑马程序员训练营学员毕业就业薪水" , 20000);调用构造器的时候,构造器确实返回了该类的对象,但是[color=Red]这个对象并不是完全由构造器来负责创建的[/color],
实际上,
1、程序员调用构造器的时候,系统会先为该对象分配内存空间,兵卫这个对象执行默认初始化,[color=Red]这个对象已经产生了---这些操作都是在构造器执行之前就完成的[/color],
2、也就是说,当系统开始执行构造器的执行体之前,系统一级创建了一个对象,只是[color=Red]这个对象还不能被外部程序访问,只能在该构造器中通过this来引用他[/color],
3、当执行构造器的执行体结束后,[color=Red]这个对象作为构造器的返回值返回,通常还会赋值给另外一个引用类型的变量,从而让外部程序可以访问这个对象[/color]
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马