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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱传波 中级黑马   /  2013-3-17 08:48  /  1462 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类和结构是两个非常相似的概念。两者都可以包含数据成员的数据结构。包含数据类型,方法以及构造方法。但他们又是两个完全不同的概念。

从大的方面看,
首先,结构是指将多种变量同时定义的一个小组
比如,我定义了一个结构,这个结构下,我可以定义它的一些各种参数
结构是用来存储数据的,是值类型

而类,则是一个种类的统称,这个种类下,既包含属性,又包含方法。
这个概念是抽象的,你可以随时引用里面的方法以及属性,是引用类型

结构和类都可以有构造方法,当我们在类中不写构造函数时,系统会默认为我们写一个无参数的构造方法 。一旦我们写了一个有参数的够早方法,原来的那个无参数的构造方法就不存在了。

结构不能使用默认的构造函数,只能使用带参数的构造函数,当定义带参数的构造函数时,一定要完成结构所有字段的初始化,如果没有完成所有字段的初始化,编译时会发生错误。
这也正是结构的优点,避免了用户忘记对某个参数进行赋值。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 曾玉锋 于 2013-3-17 15:14 编辑

我来补充一点:
1.结构是值类型,在栈上存储。
类是引用类型,在堆上分配实际空间存储,在栈上存储对象在堆上的地址。
2.结构类型的变量是在栈上创建,int a=1;int b=1; 虽然a,b在栈上各自的空间中存储的都是值1,但是他  们的存储位置是不一样的。
下面一个例子:
int a=1;
int c=a;
虽然,c的值是由a赋值,但a只是copy了一份值(1)到c空间,所以,改变a的值对c是没有影响的。

而类类型的变量是在栈上创建,存储的是在堆中对象的地址
例:
假如有一个Person类,Person类有属性Name
Person a=new Person();
Person c=a;

a复制了一份a中new Person()在堆空间中的地址给c, 如果通过a改变new Person()对象的Name,则c的值也就改变了。

小结:结构类型的变量就像一个封闭的空间,只要本身不改变,则永远不变。
      而类类型的变量如果和其它变量拥有共同的堆地址(交集),则若堆地址改变,所有引用该堆地址的变量都发生改变。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马