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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 细水长流 中级黑马   /  2014-7-28 16:48  /  2914 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 细水长流 于 2014-7-30 10:24 编辑

如题 求通俗易懂的答案,最好有例子 多谢各位大神

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 许庭洲 于 2014-7-28 16:57 编辑

1. 构造函数用于执行类的实例的初始化。
2.每个类都有构造函数,即使没有声明它,编译器也会自动地为程序员提供一个默认的构造函数。
3.在访问一个类的时候,系统将最先执行构造函数中的语句。
4.实际上,任何构造函数的执行都隐式地调用了系统提供默认的构造函数base().
5.下面例子示范了构造函数的使用:
class A
{
     int x=0,y=0,count;
     public A()
    {
          count = 0;
     }
     public A(int vx,int vy)
    {
        x=vx;
       y=vy;
    }
}

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
构造函数是类在实例化一个对象的时候调用的。每个类都会有一个默认无参数的构造函数。

至于构造函数的好处,它是在类实例化一个对象的时候,对这个对象进行初始化。比如定义了一个类
class Student
{
string name;
public string Name
{
get{return name}
}
}
这个学生类中有一个姓名的属性,并且是只读的,只读就保证了名字一旦初始化创建就不能随意修改。
如果在student s1=new student();
s1.Name="张三";是会报错的,会提示你Name这个属性是只读的,那么我们就可以通过构造函数来对Name属性进行初始化了。但是在student类中需要重载一个构造函数。
class Student
{
string name;
public student(string name)
{
this.name=name;
}
public string Name
{
get{return name}
}
}

那么我们在创建一个学生对象的时候通过:student S=new student("张三");这里调用了我们重载的一个参数的构造方法,来对只读的name进行初始化。

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
1、可以灵活对多个属性进行赋值,如果一个类 P ,有A、B、C多个属性分别封装a、b、c多个字段,当然你可以直接给字段赋初始值,但是这样局限性过高,毕竟你不能保证你每次new的一个对象里面的属性都是同一个值。如果你使用一个有多个参数的构造方法,就可以随心所欲的给属性赋值。
2、每次new一个对象,可能字段没有赋初始值(值类型默认是0,引用类型默认是null),由于这时首先调用该类的构造函数,可以保证用户在new一个对象的时候必须对某一个属性进行赋值,也避免了多次通过 实例名 . 属性 的方式为每个实例的属性赋初始值

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
构造函数:就是以类名作为函数名的方法。
比如:
class Person
{
  person() {} //无惨构造函数
  person(string name,int id){}有参构造函数
}

构造函数可以理解为方法重载,就是方法名相同,参数个数或类型不同,这样的构造函数分别实现你想要的功能,

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
_xixi_ 发表于 2014-7-28 17:43
1、可以灵活对多个属性进行赋值,如果一个类 P ,有A、B、C多个属性分别封装a、b、c多个字段,当然你可以直 ...

懂了 多谢 你这个答案 感觉答在了点子上
回复 使用道具 举报
1)对多个属性进行赋值时,不需要重复的写实例名 2)可以保证用户在new一个对象的时候必须对某一个属性进行赋值 3)和第2类似,在创建对象时,对只读属性进行初始化
回复 使用道具 举报
进来学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马