黑马程序员技术交流社区

标题: 构造函数是怎么初始化的,是初始化类成员 [打印本页]

作者: 杨占伟    时间: 2012-11-27 21:49
标题: 构造函数是怎么初始化的,是初始化类成员
本帖最后由 杨占伟 于 2012-11-28 09:51 编辑

代码如下:
namespace MyCAPP
{   
        class Peson
        {
            private readonly string name;
            public Peson(string name)
            {
                this.name = name;    //这句代码是初始化类成员name吗?
            }
            public string Name
            {
                get { return name; }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Peson peson = new Peson("张三"); //这个实例化的会不会在托管堆上开辟空间,以及和Peson类中成员name有关系吗?
                Console.WriteLine(peson.Name);
                Console.ReadKey();
            }
        }
  
}

this.name = name;    //这句代码是初始化类成员name吗?
Peson peson = new Peson("张三"); //这个实例化的会不会在托管堆上开辟空间,以及和Peson类中成员name有关系吗?


作者: 殷士剑    时间: 2012-11-28 00:26
你确定你使用的是java吗? 好吧,我把我的代码给你看看。。求技术分!
  1. class Person {
  2.         private String name;

  3.         public Person(String name) {
  4.                 this.name = name; // 这句代码是初始化类成员name
  5.         }

  6.         public String getName() {
  7.                 return name;
  8.         }
  9. }

  10. class Program {
  11.         static void Main(String[] args) {
  12.                 Person person = new Person("张三"); // 创建一个Person对象
  13.                 System.out.println(person.getName());
  14.         }
  15. }
复制代码

作者: 黑马-张扬    时间: 2012-11-28 09:02
1.this.name = name 是初始化类成员name,this是一个指向自身的引用,所以this.name是此对象的成员。
2.会在托管堆上分配空间。因为类是一种引用类型。当你声明引用类型的变量时,该变量会一直包含值 null,直至您使用 new 运算符显式创建对象的实例,或者为该变量分配已经使用 new在其他位置创建的对象 。创建对象时,将在托管堆上分配内存,变量只保存对对象位置的引用。
作者: 杨占伟    时间: 2012-11-28 09:48
谢谢,我知道了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2