黑马程序员技术交流社区

标题: 关于结构和类!!! [打印本页]

作者: 马炜亮    时间: 2013-5-15 23:44
标题: 关于结构和类!!!
本帖最后由 马炜亮 于 2013-5-19 22:15 编辑

学到类的构造函数这块,老师讲结构也有构造函数。
构造函数是用来初始化对象的,
那么结构的构造函数是做什么,是不是初始化结构里的字段?
对结构的使用比较少,很少想到声明一个结构,应该在什么情况下选择用结构。
作者: 李君言    时间: 2013-5-15 23:56
类可以被实例化,属于引用类型,是分配在内存的堆上的,类是引用传递的
结构属于值类型,是分配在内存的栈上的,结构体是复制传递的
作者: 刘学明       时间: 2013-5-16 00:10
开始的时候我也不理解为什么要构造函数,
因为那时候的设计思想还停留在面向过程编程。即我要干什么事,这件事有几个步骤,然后我决定怎么干。
面向对象不是这么直接简单,它的设计思想就是要代码重用。即我以前干过类似的事,那么我找出以前可以用到的代码,完成一部分。以前没有的我重新写。这样就有了类。   

回到你提的问题。有了类,就是有了可以重用的代码,但是我怎么产生这个对象呢。必须要实例化这个类(当然这不是唯一产生对象的途径,比如单例模式,但本质上说所有途径都是一样的)。那么就要用到构造函数。
即告诉程序我现在要实例化一个对象了,你给我马上分配内存。将内存的首地址赋给我指定的类对象。而且有时候你需要传递参数到函数里面,有了构造函数就方便了,构造函数可以有无数个。当然,传递参数到到对象里面也可以其它方法,比如直接赋一个值给成员变量,举例:
  1. class point2{      
  2. int x,y;            
  3. point2(){      }
  4. point2(int a,int b){
  5. //构造函数;含参的构造函数;构造方法必须要和类名一致,且没有返回值      
  6. x=a;      
  7. y=b;      
  8. }      
  9. void  output(){      
  10. System.out.println(x);      
  11. System.out.println(y);      
  12. }     
  13. public static void main(String args[]){      
  14. point2   pt=new point2();//实例化对象,这时候x,y没有赋值,默认初始值为0;      
  15. pt.output();      
  16. pt.x=3;pt.y=3;      
  17. pt.output();      
  18. }
  19. }
复制代码

作者: 郑丹丹1990    时间: 2013-5-16 07:44
结构在链表,对列,栈这些特殊的数据结构那里用的多吧!平常我们用的少呀!
构造函数就是给我们初始化带来了方便。
作者: 马炜亮    时间: 2013-5-16 21:55
刘学明    发表于 2013-5-16 00:10
开始的时候我也不理解为什么要构造函数,
因为那时候的设计思想还停留在面向过程编程。即我要干什么事,这件 ...

谢谢你,讲的很明了,容易理解,让我对构造函数有了更进一步的认识,真的受益匪浅。要是能详细说一下结构就更好了哈哈~~:)

作者: 马炜亮    时间: 2013-5-16 21:59
郑丹丹1990 发表于 2013-5-16 07:44
结构在链表,对列,栈这些特殊的数据结构那里用的多吧!平常我们用的少呀!
构造函数就是给我们初始化带来 ...

链表,队列…………,看来现在真的用不到结构。还得多学点。谢谢哈~~




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